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

مشكلة في Cursor


mido_develper

Recommended Posts

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

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

من فضلكم عندي مشكلة في فهم المثال التالي

CREATE OR REPLACE PROCEDURE pf_07_06
IS
	CURSOR      employees_cursor
 		(p_deptno NUMBER, p_job VARCHAR2)IS
  			SELECT	employee_id, last_name
  			FROM employees WHERE department_id = p_deptno AND job_id = p_job;
employees_record employees_cursor%ROWTYPE;
BEGIN OPEN employees_cursor(80,'SA_REP');
 	LOOP
   		FETCH	employees_cursor
 		INTO employees_record; DBMS_OUTPUT.PUT_LINE (TO_CHAR (employees_record.employee_id) ||'  ' ||
 						employees_record.last_name);
   		EXIT WHEN employees_cursor%NOTFOUND;
	END LOOP;
  	CLOSE employees_cursor;
	OPEN employees_cursor(60, 'IT_PROG');
 	LOOP
   		FETCH	employees_cursor
 		INTO employees_record; DBMS_OUTPUT.PUT_LINE (TO_CHAR (employees_record.employee_id) ||'  ' ||
 						employees_record.last_name);
   		EXIT WHEN employees_cursor%NOTFOUND ;
	END LOOP;
  	CLOSE employees_cursor;
END pf_07_06;
/





كنت عاوز اعرف ما فائدة استخدام

FOR UPDATE OF salary NOWAIT;




وجزاكم الله كل خير

===============================================================

الهم استخدمنا ولا تستبدلنا وقنا عذاب النار

رابط هذا التعليق
شارك

السلام عليكم..
بالنسبة للعبارة for update :
جميعنا نعلم أن تنفيذ عمليات الـDML يعتبر كبداية لعملية المناقلة (transaction) فعند تنفيذها مباشرةً يتم قفل لكافة السجلات التي تم التأثير عليها من قبل المستخدم الحالي بحيث لا يستطيع أحد من المستخدمين الأخرين تنفيذ أي عملية DML عليها قبل عمل Commit أو Rollback من قبل المستخدم الحالي .. و فقط يمكنهم عمل استعلام و طبعاً يشاهدون المعلومات القديمة..
تفيد هذه التعليمة بقفل السجلات التي تم التأثير عليها حتى في تعليمة السيليكت يعني تمنعهم حتى من مشاهدة السجلات التي في قيد عملية المناقلة ...و تنفذ عادة قبل عملية الـ Update بهدف التعديل على المعلومات الفعلية التي قمنا بمشاهدتها بالاستعلام ..
أما عبارة NOWAIT فهي كالتالي : إذا أردنا استخدام تعليمة select for update و كان الجدول مقفول مسبقاً فإنه ينتظر حتى ينتهي القفل من أجل عمل قفل جديد لأنه لا يمكن قفل نفس الجدول من قبل أكثر من مستخدم..و بهذا الانتظار لا استطيع متابعة عملي ... لذلك يفيد هذا الخيار بعدم الانتظار و يكتفي بإظهار رسالة تفيد بأن السجلات التي طلبت قفلها هي مقفولة مسبقاً من قبل مستخدم آخر...

أي استفسار أنا جاهز...

تم تعديل بواسطة TROYMAN
رابط هذا التعليق
شارك

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

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

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

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

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

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