الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Where Current Of

Featured Replies

بتاريخ:

السلام عليكم و رحمة الله و بركاته
ياريت لو حد يقدر مشكورا بشرح :
(WHERE CURRENT OF)

و السلام عليكم و رحمة الله و بركاته

بتاريخ:

السلام عليكم
بالنسبة لسؤالك مبدئيا سوف اشرح لك الكود على سكيما 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 تعنى حدود عمل التحديث فحينما تقوم بوضع شرط للتحديث هذا كأنك وضعت حدود معينة للبيانات التى سيتم تحديثها .
ارجوا ان اكون قد وضحت لك الفكرة وان لديك اى استفسار اخر فتفضل به .
وشكرا
ميجا

بتاريخ:

شكرا يأستاذ خالد على هذا الأيضاح وجزاك الله كل خير
وليد الحسيني

بتاريخ:

العفو استاذ وليد وجزاك الله خير
وشكرا
ميجا

بتاريخ:

أخى 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

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.