Oracle PL/SQL للحلقة مع مثال

⚡ ملخص ذكي

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

  • 🔢 أفضل ل: تُناسب حلقة FOR عدد التكرارات المعروف بدلاً من الشرط المفتوح.
  • 📏 المدى: يحدد حد أدنى وحد أعلى عدد مرات تشغيل الحلقة.
  • ⚙️ عداد ضمني: يتم تعريف متغير الحلقة تلقائيًا ويزداد من تلقاء نفسه.
  • 🎯 مجال العمل يوجد متغير الحلقة فقط داخل الحلقة.
  • 🔄 يعكس: إضافة REVERSE قبل الحد الأدنى يجعل الحلقة تحسب تنازليًا.
  • 🪜 متداخل: يمكن تداخل الحلقات، وتعمل الحلقة الداخلية بالكامل لكل تكرار خارجي.
  • 🚪 الخروج التلقائي: تنتهي الحلقة تلقائيًا عندما يخرج المتغير من النطاق.

Oracle حلقة التكرار PL/SQL

ما هي حلقة 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.

طباعة الأرقام من 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. يُطبع كل رقم بعدد مرات يساوي قيمته.

مثال على حلقة FOR المتداخلة - الجزء الأول

مثال على حلقة 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، يظل الحد الأدنى يُكتب قبل الحد الأعلى؛ يتغير فقط اتجاه التكرار. بالنسبة للحلقات التي لا يُعرف عددها مسبقًا، حلقة أساسية هو الخيار الأفضل.

الأسئلة الشائعة

لا. تُصرّح حلقة FOR عن متغيرها ضمنيًا، وهو موجود فقط داخل الحلقة. ولا يؤثر تعريف متغير بنفس الاسم خارج الحلقة على المتغير المستخدم داخلها.

يجعل الأمر REVERSE الحلقة تتكرر من الحد الأعلى إلى الحد الأدنى. تبقى الحدود مكتوبة من الأدنى إلى الأعلى؛ فقط ترتيب زيارة القيم ينعكس.

استخدم حلقة FOR عندما يكون عدد التكرارات معروفًا مسبقًا، مثل نطاق ثابت. استخدم حلقة WHILE عندما يجب أن تستمر الحلقة طالما أن الشرط قائم والعدد غير ثابت.

نعم، عندما تقوم الحلقة الأساسية ببساطة بالعد بين قيمتين ثابتتين. يمكن للذكاء الاصطناعي استبدال العداد اليدوي وأمر الخروج بنطاق FOR، مما يجعل الكود أقصر. تأكد من تطابق الحدود مع الحدود الأصلية.

لا. متغير الحلقة للقراءة فقط داخل الحلقة، لذا فإن إسناد قيمة إليه سيؤدي إلى خطأ في الترجمة. لتغيير مسار البرنامج، استخدم متغيرًا منفصلاً أو اخرج من الحلقة باستخدام الأمر EXIT.

تلخيص هذه التدوينة بـ: