Oracle PL/SQL للحلقة مع مثال
⚡ ملخص ذكي
Oracle تُنفّذ حلقة FOR في لغة PL/SQL كتلة من التعليمات البرمجية عددًا معروفًا من المرات بين حدّين أدنى وأعلى. يُصرّح عن متغير الحلقة ضمنيًا ويتزايد تلقائيًا، لذا لا حاجة إلى عدّاد يدوي، وتتيح الكلمة المفتاحية REVERSE للحلقة العدّ تنازليًا.

ما هي حلقة FOR؟
تُعد عبارة "FOR LOOP" هي الأنسب عندما تريد تنفيذ التعليمات البرمجية لعدد معروف من المرات، بدلاً من الاعتماد على شرط آخر.
في هذه الحلقة، يتم تحديد حد أدنى وحد أعلى، وطالما أن متغير الحلقة يقع ضمن هذا النطاق، يتم تنفيذ الحلقة.
متغير الحلقة يتزايد تلقائيًا، لذا لا حاجة لعملية زيادة صريحة. لا يلزم تعريف متغير الحلقة، إذ يتم تعريفه ضمنيًا.
FOR <loop_variable> in <lower_limit> .. <higher_limit> LOOP <execution block starts> . . . <execution_block_ends> END LOOP;
شرح بناء الجملة:
- تشير الكلمة المفتاحية 'FOR' إلى بداية الحلقة، وتشير الكلمة المفتاحية 'END LOOP' إلى نهايتها.
- يتم تقييم متغير الحلقة في كل مرة قبل تنفيذ جزء التنفيذ.
- تحتوي كتلة التنفيذ على جميع التعليمات البرمجية التي تحتاج إلى التشغيل ويمكن أن تحتوي على أي عبارة قابلة للتنفيذ.
- يتم تعريف متغير الحلقة ضمنيًا أثناء تنفيذ الحلقة، ونطاقه يقتصر فقط على داخل الحلقة.
- عندما يخرج متغير الحلقة عن النطاق، يخرج التحكم من الحلقة.
- يمكن جعل الحلقة تعمل بترتيب عكسي عن طريق إضافة الكلمة المفتاحية 'REVERSE' قبل lower_limit.
مثال 1: في هذا المثال، نقوم بطباعة الأرقام من 1 إلى 5 باستخدام عبارة حلقة FOR.
BEGIN dbms_output.put_line('Program started.'); FOR a IN 1 .. 5 LOOP dbms_output.put_line(a); END LOOP; dbms_output.put_line('Program completed.'); END; /
Code التفسير:
- Code السطر 2: طباعة عبارة "بدأ البرنامج".
- Code السطر 3: تشير الكلمة المفتاحية 'FOR' إلى بداية الحلقة، ويتم تعريف متغير الحلقة 'a'. يأخذ هذا المتغير الآن قيمًا من 1 إلى 5.
- Code السطر 5: يطبع قيمة "أ".
- Code السطر 6: تشير الكلمة المفتاحية 'END LOOP' إلى نهاية كتلة التنفيذ.
- يستمر تنفيذ السطر 5 حتى تصل قيمة 'a' إلى 6، وعند هذه النقطة يفشل الشرط ويخرج التحكم من الحلقة.
- Code السطر 7: طباعة عبارة "تم إكمال البرنامج".
حلقات متداخلة
يمكن أيضًا تداخل عبارات التكرار. قد تكون الحلقات الخارجية والداخلية من أنواع مختلفة. في حلقة متداخلة، تُنفَّذ الحلقة الداخلية بالكامل مع كل تكرار للحلقة الخارجية.
LOOP --outer <execution block starts> LOOP --inner <execution_part> END LOOP; <execution_block_ends> END LOOP;
شرح بناء الجملة:
- تحتوي الحلقة الخارجية على حلقة أخرى بداخلها.
- يمكن أن تكون الحلقات من أي نوع، ووظيفة التنفيذ هي نفسها.
مثال 1: في هذا المثال، نطبع الأرقام من 1 إلى 3 باستخدام حلقة تكرار FOR. يُطبع كل رقم بعدد مرات يساوي قيمته.
DECLARE b NUMBER; BEGIN dbms_output.put_line('Program started'); FOR a IN 1..3 LOOP b:= 1; WHILE (a>=b) LOOP dbms_output.put_line(a); b:= b+1; END LOOP; END LOOP; dbms_output.put_line('Program completed'); END; /
Code التفسير:
- Code السطر 2: تعريف المتغير 'b' كنوع بيانات 'NUMBER'.
- Code السطر 4: طباعة عبارة "بدأ البرنامج".
- Code السطر 5: تشير الكلمة المفتاحية 'FOR' إلى بداية الحلقة، ويتم تعريف متغير الحلقة 'a'. يأخذ هذا المتغير الآن قيمًا من 1 إلى 3.
- Code السطر 7: إعادة ضبط قيمة "b" إلى "1" في كل مرة.
- Code السطر 8: الداخل حائط اللوب يتحقق من الشرط a>=b.
- Code السطر 10: يطبع قيمة "a" طالما تم استيفاء الشرط أعلاه.
- Code السطر 14: طباعة عبارة "تم إكمال البرنامج".
حلقة FOR وعكس حلقة FOR
بشكل افتراضي، تبدأ حلقة FOR العد تصاعديًا من الحد الأدنى إلى الحد الأعلى. إضافة الكلمة المفتاحية REVERSE تجعلها تحسب تنازليًا مع الحفاظ علىping الحدود بنفس الترتيب. يظهر كلا الشكلين معًا أدناه حتى يكون الفرق واضحًا.
| شكل | رأس | ترتيب القيم |
|---|---|---|
| تصاعدي | لـ في 1 .. 5 | 1، 2، 3، 4، 5 |
| تنازلي | لـ في الاتجاه المعاكس 1 .. 5 | 5، 4، 3، 2، 1 |
لاحظ أنه حتى مع استخدام REVERSE، يظل الحد الأدنى يُكتب قبل الحد الأعلى؛ يتغير فقط اتجاه التكرار. بالنسبة للحلقات التي لا يُعرف عددها مسبقًا، حلقة أساسية هو الخيار الأفضل.




