|

|
سلسله دروس PL/SQL:الدرس
الثاني |

|
بسم الله الرحمن
الرحيم
اول شي مبروك علينا وعليكم الشهر
واللهم اعنا على صيامه وقيامه.
اتمنى انكم فهمت الدرس الاول
وطبقتوا ذلك جيدا
الدرس الثاني:
تابع لاوامر اللغة
ب- الـــتكرار :
ويوجد عدة اوامر للتكرار
وهي:
* loop-exit-end
وهنا لابد من وضع شرط
لأنهاء الحلقة
نأخذ مثال بسيط على ذلك
Declare
i number(5);
BEGIN
i:=1;
LOOP
IF i>10 then
EXIT;
END IF;
DBMS_OUTPUT.PUT_LINE('i =' ||
i);
i:=i+1;
End loop;
END;
/
شرح الكود السابق
السطر الثاني : تعريف متغير من نوع
رقم
السطر الثالث :البداية
السطر الرابع : اعطاء المتغير قيمة ابتدائية
وهي i=1
السطر الخامس : شرط الانهاء
السطر السادس : الانهاء اذا كان
i>10 ولا يكمل
السطر السابع :انها if
السطر الثامن : طباعة i
السطر التاسع :زيادة قيمة i بواحد
السطر العاشر : نهاية الحلقة
وبعد كتبابة هذا
الكود يكون الناتج كمايلي:
i =1 i =2 i
=3 i =4 i =5 i =6 i =7 i =8 i =9 i =10
------------------------------------------------------------------------------
**
LOOP- EXIT WHEN - END
Declare
i number(5);
BEGIN
i:=1;
LOOP
EXIT WHEN
i>10;
DBMS_OUTPUT.PUT_LINE('i =' ||
i);
i:=i+1;
End loop;
END;
/
ويكون الناتج نفس السابق لكن
لاحظ استخدم شرط الانهاء
EXIT WHEN
i>10;
------------------------------------------------------------------------------
*** WHILE - LOOP - END
Declare
i number(5);
BEGIN
i:=1;
WHILE i <= 10 LOOP
DBMS_OUTPUT.PUT_LINE('i =' ||
i);
i:=i+1;
End loop;
END;
/
ويكون الناتج نفس المثال
السابق
------------------------------------------------------------------------------
**** FOR - IN - LOOP - END :
وهذه ايضا طريقة اخرى لاستخدام حلقات التكرار وهي
نفس عمل اسلوب حلقات for في اي لغة برمجة
والصيغة العامه لها هي على الاتي
LOOP النهاية.. البداية FOR i IN
الجمل المراد
تكرارها
END
LOOP
مثــــــــــــــــــــال:
Declare
i number(5);
BEGIN
FOR i IN
1..10 LOOP
DBMS_OUTPUT.PUT_LINE('i =' ||
i);
End loop;
END;
/
وسوف يكون الناتج كمايلي(نفس
السابق):
i
=1 i =2 i =3 i =4 i =5 i =6 i =7 i =8 i =9 i
=10
------------------------------------------------------------------------------------
ج/ المؤشرات CURSORS
هذا الدرس من اهم
المواضيع في pl/sql
تستخدم pl/sql المؤشرات cursors لأدارة عبارات
التحديد select في لغة sql وكما
لاحظنا الاوامر السابقة مثل if والتكرار لم نستخدمها مع
بيانات الجداول المخزنه ولعمل ذلك لابد من استخدام هذه المؤشرات.
وهناك نوعين من
المؤشرات هي الضمنية والصريحة وسوف نتطرق لك واحد بالتفصيل والامثلة
اللازمة.
أ- المؤشرات الصريحه
:
يتم تعريف هذا النوع
من المؤشرات كجزء من الاعلان declare ويجب ان تشتمل عبارة
sql المعرفه على عبارة التحديد select
فقط حيث لايمكن استخدام الكلمات الاساسية insert,update,delete
وعند استخدام
المؤشرات الصريحه دائما ماستكتب اربعة مكونات كمايلي:
1- يتم تعريف المؤشر
في الجزء declare
2-
يتم فتح المؤشر بعد عبارة
begin
الصيغة العامة لتعريف
المؤشر الصريح كمايلي:
DECLARE
IS اسم المؤشر CURSOR
الاستعلام
تقوم باستبدال اسم
المؤشر باسم مؤشر حقيقي
وتقوم بوضع جملة
الاستعلام select في مكان الاستعلام
ولكي تقوم بفتح هذا
المؤشر وتستخدمه نقوم بفتحه باستخدام الامر open
كمايلي:
اسم المؤشر OPEN
وبعد فتح المؤشر تقوم
باسترجاع او تحميل البيانات سطر(سجل) واحد من المؤشر الذي تم تعريفه باستخدام الامر
FETCH كمايلي:
.......,متغير2,متغير1 INTO اسم المؤشر FETCH
ومعنى
هذا اي قم باسترجاع البيانات من المؤشر المعطى اسمه وحملها into الى المتغيرات كع ملاحظة ان عدد المتغيرات يساوي عدد الحقول
الموجودة في استعلام المؤشر.
وبعد الانتهاء من
اجراء العمليات على المؤشر يجب عليك اغلاقه ويتم اغلاقه كمايلي:
close cursor_name
مثال على طريقة تعريف
مؤشر :
افرض انه لدينا هذا
الجدول
| age |
name |
no |
| 23 |
mohammed |
111 |
| 22 |
talal |
222 |
| 24 |
majed |
333 |
اولا قم بانشاء هذا
الجدول كمايلي:
create table stud( no
number(4), name varchar2(40), age number(2));
ثانيا قم بادخال
البيانات السابقة في هذا الجدول كمايلي:
insert into stud
values(111,'mohammed',23);
insert into stud
values(222,'talal',22);
insert into stud
values(333,'majed',24);
ثم قم بنتفيذ
مايلي
set serveroutput on;
DECLARE
name_stu
varchar2(40);
CURSOR
name_student IS
select name from
stud
where
no=111;
BEGIN
OPEN
name_student;
FETCH name_student INTO name_stu;
DBMS_OUTPUT.PUT_LINE(name_stu);
CLOSE
name_student;
END;
/
بعد
التنفيذ سوف يظهر لك الناتج كمايلي:
mohammed
وهذا الشي
صحيح
لاحظ اننا
اتبعنا نفس الخطوات التي ذكرناه لكي نتعامل مع مؤشر صريح
--------------------------------------------------
صراحه تعبت
لذلك نكمل الدرس القادم
-----------------------------------------------------------------------
اعتذر عن طول الدرس
وانشاء الله في الدرس القادم سوف نأخذ
المزيد من الامثله على المؤشرات الصريحه وطريقة التعامل معه بطرق
عديدة
وسوف نبدأ بالمؤشرات الضمنيه وهي اسهل من
المؤشرات الصريحه
ارجو دراسة هذا الدرس وتطبيقه لكي يسهل
عليك الدرس القادم
-------
اخوكم المخلص
حمد المهندس
منتديات الفريق العربي
للبرمجة
----------------------------------------
|