إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

Where Current Of


4 رد (ردود) على هذا الموضوع

#1 gamal

gamal

    مشترك

  • الأعضــاء
  • 95 مشاركة

تاريخ المشاركة 23 October 2007 - 04:34 PM

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

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

#2 khaledmega

khaledmega

    عضو مميز

  • الأعضــاء
  • 838 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 23 October 2007 - 07:41 PM

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

من أهـم مواضــيعي :



نفسك تسطب اوراكل 10g وبالصور وتربط بين الداتابيز والديفولبر ؟


للأستفسار عن أى شيء يخص الأوراكل أبس أو اوراكل ديفولبر راسلنى على

e
ng-mega@hotmail.com

 

Oracle Apps Techno-Functional Consultant


Oracle Developer & Instructor

 

Instructor At Next Academy

 

محاضر معتمد لدي نكست أكاديمي

OCA - OCP

م / خالد الشاذلي


#3 walid148960

walid148960

    مشترك

  • الأعضــاء
  • 68 مشاركة

تاريخ المشاركة 23 October 2007 - 07:53 PM

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

#4 khaledmega

khaledmega

    عضو مميز

  • الأعضــاء
  • 838 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 23 October 2007 - 07:58 PM

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

من أهـم مواضــيعي :



نفسك تسطب اوراكل 10g وبالصور وتربط بين الداتابيز والديفولبر ؟


للأستفسار عن أى شيء يخص الأوراكل أبس أو اوراكل ديفولبر راسلنى على

e
ng-mega@hotmail.com

 

Oracle Apps Techno-Functional Consultant


Oracle Developer & Instructor

 

Instructor At Next Academy

 

محاضر معتمد لدي نكست أكاديمي

OCA - OCP

م / خالد الشاذلي


#5 sameh bakkar

sameh bakkar

    مشرف قسم المبتدئين

  • فريق الإشراف
  • 1,019 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 24 October 2007 - 12:52 AM

أخى 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   38.09كيلو   58 عدد مرات التحميل

Sameh Bakkar

Principal Oracle Apps Techno-Functional Consultant / Oracle E-Business Suite Certified Trainer

Oracle E-Business R11 Suite Applications Workflow Certified Expert

Oracle E-Business Suite R12 HCM Certified Implementation Specialist

Oracle Certified Professional

ITIL V3 Foundation certified

Microsoft Project certified




الموقع الخاص: AppsLead | Your Honest Guide | Sameh Bakkar