بتاريخ: 26 مايو 200917 سنة comment_158165 لم اعرف الهدف من استخدام التعبير &where_clause في التقرير ان شاء الله تقدرون تساعدوني ---نسيت اقولكم ان where_clause هو اسم ل user parameter Select BokCde, Trim(InitCap(BokTtl)) Ttl, sum(Nvl(BokQty, 0)+ Nvl((Select Sum(Nvl(ExpQtyRmn, 0)) From KExpBokT Where ExpBok = BokCde), 0)) Qty, t.bokinpri From KBokBscT t &where_clause group by BokCde, Trim(InitCap(BokTtl)),t.bokinpri order by bokcde تقديم بلاغ
بتاريخ: 26 مايو 200917 سنة comment_158173 هذا يعنى ان جملة الـ where يتم تكوينها بصورة ديناميكية اثناء الرن تايم تقديم بلاغ
بتاريخ: 26 مايو 200917 سنة كاتب الموضوع comment_158175 اها وهل استخدامها لأني مااقدر استخدم ديكود لأن عندي اكثر من قيمة حيث ان :where_clause := 'where SUBSTR(T.BOKCDE,1,3) IN (''999'',''UOB'',''uob'')';وهل فيه طريقة اخرى بدون مااستخدم تعبير &where_clauser تقديم بلاغ
بتاريخ: 27 مايو 200917 سنة comment_158282 السلام عليكم.ال User Parameters في الأوراكل تنقسم إلى نوعان:1- Bind Paramter وهذا النوع يمكن أن يسمى ب Scalar Parameter هذا لأنه يقبل Data Type واحده فقط (على حسب نوعه) هذا بالإضافه أنه يقبل فقط ال Input Value لجملة ال Where. فمثلا إذا أردت أن تقوم بعمل جملة Select على أن تتغير هذه الجمله في كل مره حسب ال Input Value لإسم القسم . أنظر المثال. SELECT * FROM employees WHERE employee_id = _emp_id عند عمل Run للتقرير ستجد Prompt يطلب منك إدخال قيمة هذا ال Parameter (مثلا 120 ) . بالنسبه لهذا النوع ، فإن له ثلاث أنواع Data Type إما Number أو Date أو Character . ويكتب مثلا (your_parameter_name:) أي أنه لابد من أن يكون مسبوقا ب " : " . لاحظ أن هذا النوع محدود الإمكانيات ، حيث أنه لا يقبل إلا ال Input Value . فمثلا إذا أخذنا المثال السابق وعدلنا به ليكون هكذا: SELECT * FROM employees WHERE _emp_l_name وجعلنا نوعه في الReport ليكون Character وبعذ ذلك عملنا Run للتقرير، وكتبنا في ال Prompt Screen هذا : Last_Name = 'King' فإنه سيرجع Error هذا لأن هذا النوع كما قلت محدود الإمكانيات ولا يقبل إلا ال Input Value وليس جملة ال Where نفسها !.وبذلك نعدل الجمله لتكون هكذا SELECT * FROM employees WHERE Last_Name = _emp_l_name وعند عمل Run نكتب في ال Prompt Screen : King 2- النوع الثاني (الأكثر مرونه ) يسمى ال Lexical Parameter . هذا النوع غير محدود الإمكانيات مثل الأول ، حيث أنه يمكنه أن يقبل فقط ال Input Value كما أنه يمكن أن يقبل جمله Where كامله. ده ممكن أن يقبل جملة Select كامله !. هذا النوع لا يختلف عن الأول Physically من حيث الأنواع ، ولكن Logically لابد وأن يكون من نوع Character . ويتم كتابته مسبوقا بعلامة ال ampersand . أي علامة " & " فمثلا أنظر لهذا المثال: SELECT * FROM employees &WHERE_CLAUES لا تنسى أن تجعل ال Data Type لهذا ال parameter لتكون Character وهذا من خلال ال Property Inspector له (شاشة الإعدادات الخاصه له) . بعد عمل Run للتقرير أكتب في ال Prompt Screen هذا: WHERE Salary> 3000 AND department_id > 10 لاحظ أنك كتبت جملة Where كامله وليس مثل الأول. لهذا يسمى Lexical !. بالإضافه أن هذا النوع ممكن أن يقوم بعمل الأول لأنه غير محدود الإستخدام. مثلا SELECT * FROM employees WHERE Last_Name = &p_emp_l_name وعند عمل Run للتقرير تكتب King :هذا النوع مهم جدا جدا جدا من ناحية قوته برمجيا. لاحظ مدى الإستفاده منه إذا أردت أن تكتب جملة ال Where كلها والتي هي مرهونه بشروط معينه أو بناء على logic معين.أعتقد أن النوع الأول بسيط وكلنا عارفينه. طيب مثلا إذا أردت أن أكتب جملة Where مرتين . الأولى لتكون هكذا WHERE Salary> 3000 AND department_id > 10 والثانيه تكون هكذا WHERE Salary< 10000 AND department_id between 10 and 50 AND HIRE_DATE > TO_DATE('01/01/1980','dd/mm/yyyy') وهذا التغيير سيكون بناء على logic معين. مثلا من خلال الفورمه نفسها وذلك قبل إستدعاء التقرير ليكون هذا التقرير يتم تغييره كاملة بناء على الفورمه.ملاحظه بسيطه: لا تنسى حجم ال Data Type لهذا ال Lexical Parameter حتى يقبل منك عدد أحرف جملة ال Where .إذا أردت مثال عملي ستجد في مشاركاتي ( المتاحه من خلال الرابط الموجود ضمن التوقيع الخاص بي) مشاركه بعنوان Multiple Search Form تقريبا.لو أردت توضيح أكثر أنا تحت أمرك. تقديم بلاغ
بتاريخ: 1 يونيو 200917 سنة كاتب الموضوع comment_158863 جزاك الله الف خير اخ ويلووووووفي ميزان حسناتك ان شاء الله تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.