بتاريخ: 12 نوفمبر 201312 سنة comment_242480 استخدام bulk collect و for all بلا شك هام للغاية عند التعامل مع الكميات الضخمة من البيانات ونرجو ممن لدية خلفية جيدة تناول الموضوع بالشرح ولكم جزيل الشكر CREATE OR REPLACE PROCEDURE increase_salary ( department_id_in IN employees.department_id%TYPE, increase_pct_in IN NUMBER) IS TYPE employee_ids_t IS TABLE OF employees.employee_id%TYPE INDEX BY PLS_INTEGER; l_employee_ids employee_ids_t; l_eligible_ids employee_ids_t; l_eligible BOOLEAN; BEGIN SELECT employee_id BULK COLLECT INTO l_employee_ids FROM employees WHERE department_id = increase_salary.department_id_in; FOR indx IN 1 .. l_employee_ids.COUNT LOOP check_eligibility (l_employee_ids (indx), increase_pct_in, l_eligible); IF l_eligible THEN l_eligible_ids (l_eligible_ids.COUNT + 1) := l_employee_ids (indx); END IF; END LOOP; FORALL indx IN 1 .. l_eligible_ids.COUNT UPDATE employees emp SET emp.salary = emp.salary + emp.salary * increase_salary.increase_pct_in WHERE emp.employee_id = l_eligible_ids (indx); END increase_salary; تقديم بلاغ
بتاريخ: 12 يناير 201412 سنة comment_245421 باختصار همايوفران الوقت والكود كثرا لو تريد وضع بيانات 100 موظف فى جدول تعريفى TYPE employee_ids_t IS TABLE OF employees.employee_id%TYPE اما ان تعمل لوب على الاندكس له مثلا الموظف رقم 1 هو كذا والثانى هو كذا والثالث هو كذا باستخدام كرسور قامت اوراكل باختصار الوقت والمجهود معا بتعريفهم هم ال 100 معا مرة واحدة وتلقائيا كل موظف ياخذ الاندكس الخاص به تقديم بلاغ
بتاريخ: 12 يناير 201412 سنة comment_245422 السلام عليكم و رحمة الله : استخدام BULK او forall مهم جدا ولا أنصح باستخدامها الا في حاله استخدام ORACLE COMPLEX TYPE فقط و لغير هذا فان CURSOR يفي بالغرض و بزياده و يجب ان تأخذ ف الحسبان .. و تستخدم في حاله تمرير جدول كمتغير و ما سيرجع غير معرف نوعه ..sys_ref و لا تستخدمها في الجدوال real time commit او الجداول التي تحتوي علي الانواع blob , clob,table cloumn تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.