الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ال Cursor والبرمجه ؟

مغلق
بدأه honest في 24 أغسطس 2001 · 3 رد · 3,054 مشاهدة · في قواعد بيانات Oracle
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخواني الأعزاء السلام عليكم ورحمة الله وبركاته

الكل يعلم اهمية الـ PL/SQL في البرمجه في الـ FORM وحتى تستطيع ان تصنع برنامج ولو كان صغيرا يجب عليك ان تعرف ماهو الـ CURSOR فبدونه لايمكن لك عمل برنامج اطلاقا بالمعنى الصحيح. فمثلا لو أردت ان تقوم بعمل الآتي :

*- الموظفون الذين رواتبهم اقل من 1000 ريال لهم زياده 1.1%

*- الموظفون الذين رواتبهم بين 1500 و 2500 لهم زياده 1.7%

وماعدا ذلك لهم زياده 1.8% .

كيف يمكنك عمل البرنامج السابق ؟؟؟

هل تقوم بعمل ذلك سطر سطر كما في SQL !!! او ماذا تعمل ؟

الـ CURSOR امكانياته اكبر بكثير من ان يشبه بالمثال السابق ولكن كان للتوضيح فقط .

دعونا الآن نتكلم عن CURSOR بأختصار :

CURSOR هو عباره عن منطقة عمل SQL خاصه.

يوجد هناك نوعان من CURSOR :

1- Implicit Cursors

2- Explicit Cursors

* النوع الأول هو عباره عن CURSOR خاص بالأوراكل سيرفر اي انه يعمل اوتوماتيكيا دون تدخل من المبرمج . مثال ذلك عندما تكتب امر UPDATE او INSERT ..الخ ماذا يحدث الذي يحدث انه يقوم CURSOR الخاص باأوراكل تلقائيا دون تدخل منك بفتح الجدول المطلوب وجلب البيانات ومن ثم اغلاق الجدول واظهارها امامك .

* النوع الثاني هو عباره عن CURSOR ينشأ ويحدد عن طريق المبرمج حيث يمكنه فتح الجدول وجلب مايشاء منها واغلاقه متى مااراد .

يتم انشاء الـ CURSOR وفتحه واغلاقه من داخل البرنامج .

سوف اتطرق إن شاء الله اليوم او غدا الوظائف الخاصه بالنوع الأول مع الأمثله وكذلك النوع الثاني مع الأمثله .

والله من وراء القصد

ابو عبدالآله

#2

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

بارك الله فيك يا ابو عبدالآله

#3

[M-l]***** SQL CURSOR *****[/M]

ذكرنا ان هناك نوعان من CURSOR :

1- Implicit Cursors

2- Explicit Cursors

تكلمنا عن النوع الأول وقلنا انه خاص بلأوراكل سيرفر اي انه يقوم باالوظائف من تلقاء نفسه دون تدخل من المبرمج. نستعرض اليوم امثله عن النوع الأول ومن امثلة تلك الوظائف :

* [F=Red]SQL%ROWCOUNT[/F]

للسؤال عن عدد الصفوف

* [F=Red]SQL%FOUND [/F]

لأرجاع قيمة TRUE في حالة انه وجد صف او اكثر

* [F=Red]SQL%NOTFOUND[/F]

لأرجاع قيمة TRUE في حالة انه لم يجد اي صف

* [F=Red]SQL%ISOPEN[/F]

للسؤال عن حالة الـ CURSOR ودائما تأخذ قيمة FALSE لأن الـ CURSOR يقفل فورا بعد الأنتهاء من المهمه ... (Implicit) . نأخذ الآن مثال لذلك :

 VARIABLE  rows_deleted  VARCHAR2(30)   متغير خارجي
DECLARE
     v_ordid    NUMBER :=605;
BEGIN
     DELETE FROM  item 
     WHERE    ordid = v_ordid;
      :rows_deleted := (SQL%ROWCOUNT || ' rows deleted.');
END;
/       التنفيذ

PRINT  rows_deleted           للطباعه على الشاشه

ماذا حصل الذي حصل انه قام بعد الصفوف التي مسحت ومن ثم قمنا بإظهارها على الشاشه مثل ( like this =( 20 rows deleted

والآن يجب ان تعرف ان تلك الوظائف تستطيع ان تستخدمها مع الأوامر الأخرى مثل أمر if ..الخ اليك هذا المثال : لو اردت ان تجمع رواتب جميع الموظفين وإعطائها للموظف عن طريق رقمه الوظيفي :

DECLARE 
     v_sum_sal          number;
BEGIN
     SELECT sum(sal) INTO v_sum_sal  FROM emp
      WHERE deptno=10;
UPDATE emp
     SET sal=v_sum_sal
WHERE empno=& empno;
IF SQL%FOUND 
DBMS_OUTPUT.PUT_LINE
تضع هنا الرساله
ELSE
تضع هنا ماتريد

عندما يجد الموظف تكون القيمه TRUE ويطبع الرساله الأولى واذا لم يجد الموظف تكون القيمه FALSE ويطبع الرساله الثانيه .

#4

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

انا قبل كذه كنت ضائع

والحمدالله مع المثال فهمتها بشكل ممتاز

هذا الموضوع مغلق.

مواضيع مشابهة