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

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

صورة
- - - - -

مشكلة في Cursor


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

#1 mido_develper

mido_develper

    عضو نشط

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

تاريخ المشاركة 04 March 2009 - 06:28 AM

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

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

من فضلكم عندي مشكلة في فهم المثال التالي
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;



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

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

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

#2 TROYMAN

TROYMAN

    مشترك

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

تاريخ المشاركة 04 March 2009 - 12:02 PM

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

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

تم التعديل بواسطة TROYMAN, 04 March 2009 - 12:03 PM.


<<اللهم لا علـم لنا إلا ما علّمتنا إنك أنت العليــم الحكيــم>>
<<اللهم علّمنا ما ينفعنا و انفعنا بما علّمتنا و ازدنا علماً>>



Programmer (C#.Net,C++,ASP) & Oracle Developer


#3 mido_develper

mido_develper

    عضو نشط

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

تاريخ المشاركة 06 March 2009 - 09:18 PM

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

#4 سعد الروبى

سعد الروبى

    عضو

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

تاريخ المشاركة 12 March 2009 - 12:34 PM

بارك الله فيك وزادك من علمه