بتاريخ: 23 أكتوبر 200718 سنة comment_113878 السلام عليكم و رحمة الله و بركاتهياريت لو حد يقدر مشكورا بشرح :(WHERE CURRENT OF)و السلام عليكم و رحمة الله و بركاته تقديم بلاغ
بتاريخ: 23 أكتوبر 200718 سنة comment_113900 السلام عليكمبالنسبة لسؤالك مبدئيا سوف اشرح لك الكود على سكيما scott/tigerوالان كي نفهم الكود يجب الاستعلام عن اسم الموظف و راتبه من جدول emp كالتالي : select ename , sal from emp order by sal; سنجد ان النتيجة هي كالتالي : ENAME SAL ---------- ---------- SMITH 800 JAMES 950 ADAMS 1100 WARD 1250 MARTIN 1250 MILLER 1300 TURNER 1500 ALLEN 1600 CLARK 2450 BLAKE 2850 JONES 2975 SCOTT 3000 FORD 3000 KING 5000 14 rows selected. جميل دعنا ننفذ مثال نطبق فيه سؤالك ثم اقوم بالشرح لك ؛ المثال يريد منا عمل تعديل زيادة المرتب 100 جنيه للموظفين الذين مرتبهم اقل من 1500؟ declare cursor x is select ename , sal from emp for update nowait; v_count number; begin for i in x loop if i.sal < 1500 then update emp set sal = sal + 100 where current of x; end if; v_count := x %rowcount; end loop; dbms_output.put_line(v_count); end; / الان دعنا نعيد الاستعلام بعد عمل الكيرسور كي نرى الفرق !! select ename , sal from emp order by sal; ENAME SAL ---------- ---------- SMITH 900 JAMES 1050 ADAMS 1200 WARD 1350 MARTIN 1350 MILLER 1400 TURNER 1500 ALLEN 1600 CLARK 2450 BLAKE 2850 JONES 2975 SCOTT 3000 FORD 3000 KING 5000 14 rows selected. الان دعنا نرى ماذا حدث ؛ جملة الكيرسور كانت تقول انه اذا كان المرتب اقل من 1500 فليقوم بالتحديث وزيادة المرتب 100 جنيه ؛ فعندما بدء الكيرسور فى العمل وجد ان هناك 6 افراد يأخذون مرتب أقل من 1500 ؛ اذن العدد الحالي هو 6 افراد فقط " وهم المقصود بهم WHERE CURRENT OF " الذى سيتم تحديثهم فقط وذلك لانطباق الشرط عليهم فقط دون باقى الموظفين ؛ وجملة WHERE CURRENT OF تعنى حدود عمل التحديث فحينما تقوم بوضع شرط للتحديث هذا كأنك وضعت حدود معينة للبيانات التى سيتم تحديثها .ارجوا ان اكون قد وضحت لك الفكرة وان لديك اى استفسار اخر فتفضل به .وشكراميجا تقديم بلاغ
بتاريخ: 23 أكتوبر 200718 سنة comment_113902 شكرا يأستاذ خالد على هذا الأيضاح وجزاك الله كل خير وليد الحسيني تقديم بلاغ
بتاريخ: 23 أكتوبر 200718 سنة comment_113931 أخى gamal اجابة هذا السؤال فى كتاب اوراكل نفسه ضمن كورس ال PL و مرفق الجزى الخاص بشرح سؤالكمثال CREATE OR REPLACE PROCEDURE ORCL IS CURSOR employees_cursor IS SELECT e.employee_id, e.last_name,e.salary, d.department_name FROM employees e, departments d WHERE e.department_id = d.department_id AND e.department_id = 60 FOR UPDATE OF salary NOWAIT; BEGIN FOR emp_record IN employees_cursor LOOP IF emp_record.salary < 5000 THEN UPDATE employees SET salary = emp_record.salary * 1.10 WHERE CURRENT OF employees_cursor; END IF; END LOOP; END ORCL; / أنظر الى المرفقات لترى الشرح من اوراكل نفسها.. Les07.zip تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.