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

⚡ ملخص ذكي

تُنفّذ حلقات PL/SQL جزءًا من التعليمات البرمجية بشكل متكرر لعدد محدد من المرات. توفر PL/SQL حلقات أساسية، وحلقات FOR، وحلقات WHILE، يتم التحكم بها بواسطة أوامر CONTINUE وEXIT وEXIT WHEN وGOTO، ويمكن تسمية الحلقات لإدارة البنى المتداخلة بشكل منظم.

  • 🔁 الغرض: تقوم الحلقة بتشغيل كتلة من التعليمات البرمجية عدة مرات، مما يقلل من حجم التعليمات البرمجية وتعقيدها.
  • 🧭 عداد التكرار: يحدد متغير العداد شرط الحلقة ويجب أن يتغير حتى تتمكن الحلقة من الخروج.
  • ⏭️ استمر: يتخطى باقي التكرار الحالي ويبدأ التكرار التالي.
  • 🚪 مخرج / متى يخرج: يخرج من الحلقة فوراً، ويمكنه أيضاً الخروج منها عندما يكون الشرط المنطقي صحيحاً.
  • 🏷️ ملصقات: تسمح تسمية الحلقة بين قوسين مزدوجين لـ EXIT باستهداف حلقة خارجية.
  • ♾️ حلقة أساسية: يستمر البرنامج حتى الوصول إلى مخرج صريح؛ وبدون مخرج، فإنه يستمر في التكرار إلى الأبد.
  • 🧩 ثلاثة أنواع: تغطي حلقات التكرار الأساسية، وحلقة FOR، وحلقة WHILE الأنماط الشائعة.

Oracle حلقة PL/SQL

ما هي الحلقات؟

تسمح الحلقات بتنفيذ جزء معين من الكود في البرنامج لعدد محدد من المرات. في هذا الدرس، سنتناول مفهوم الحلقات في لغة PL/SQL وتدفق التحكم فيها.

مقدمة لمفهوم الحلقات

يوفر مفهوم الحلقات المزايا التالية في البرمجة:

  • إمكانية إعادة استخدام الكود.
  • حجم الكود مُصغّر.
  • سهولة التحكم.
  • تبسيط أقل.

يوضح الرسم البياني أدناه المرحاضping مفهوم.

مرحاضping مخطط تدفق المفاهيم في لغة PL/SQL

في الرسم التخطيطي أعلاه، يتم التحقق من شرط الحلقة، وطالما أنه يتم استيفاؤه، يتم تشغيل كتلة التنفيذ.

في كل تكرار، يتغير متغير عداد الحلقة الذي يحدد شرط الحلقة لإخراج البرنامج منها. في بعض الحالات، يكون هذا العداد عبارة عن زيادة أو نقصان لعدد محدد مسبقًا، وفي حالات أخرى يكون شرط بحث يستمر في تنفيذ الكتلة حتى يتحقق.

بيانات التحكم في الحلقة

قبل تعلم مفهوم الحلقات، من المهم تعلم عبارات التحكم في الحلقة. تتحكم هذه العبارات في تدفق التنفيذ داخل الحلقة.

متابعة

تُعلِم هذه الكلمة المفتاحية محرك PL/SQL بأنه عند مصادفة عبارة CONTINUE داخل حلقة تكرارية، فإنه يتخطى باقي التعليمات البرمجية في كتلة التنفيذ ويبدأ التكرار التالي فورًا. ويُستخدم هذا بشكل أساسي عندما يجب تخطي التعليمات البرمجية داخل الحلقة التكرارية لقيم تكرارية معينة.

خروج / خروج متى

تُوجّه هذه الكلمة المفتاحية مُحرك PL/SQL للخروج الفوري من الحلقة الحالية. في الحلقات المتداخلة، يُخرج الأمر EXIT في الحلقة الداخلية الحلقة الداخلية فقط، وليس الحلقة الخارجية. يتبع الأمر 'EXIT WHEN' تعبيرٌ يُعطي نتيجة منطقية؛ إذا كانت النتيجة TRUE، يتم الخروج من الحلقة.

GOTO

ينقل هذا البيان التحكم إلى بيان مُعَلَّم ("GOTO ;"). وله القيود التالية:

  • يمكن أن يتم نقل السيطرة فقط ضمن البرامج الفرعية.
  • لا يمكن نقل التحكم من جزء معالجة الاستثناءات إلى جزء التنفيذ.

لا يُنصح باستخدام هذا البيان إلا في حالة عدم وجود بديل، لأن التحكم في التعليمات البرمجية tracتصبح القدرة على التحكم صعبة للغاية عندما يتم نقل السيطرة من جزء إلى آخر.

أنواع الحلقات في PL/SQL

PL / SQL يوفر الأنواع الثلاثة التالية من الحلقات:

يوضح الجدول أدناه مقارنة بين الثلاثة قبل أن يتم تغطية الحلقة الأساسية بالتفصيل.

أنشوطة معايير الخروج يُستخدم عند
حلقة أساسية مخرج صريح في الكتلة لا يعتمد الخروج على عدد أو شرط ثابت.
لحلقة يصل العداد إلى نهاية مداه عدد التكرارات معروف مسبقًا
حلقة WHILE يصبح الشرط خاطئًا يجب أن تستمر الحلقة طالما أن الشرط قائم

بيان الحلقة الأساسية

هذا هو أبسط هيكل حلقة تكرارية في لغة PL/SQL. يبدأ جزء التنفيذ بالكلمة المفتاحية 'LOOP' وينتهي بالكلمة المفتاحية 'END LOOP'. يجب تحديد شرط الخروج داخل جزء التنفيذ لإخراج التحكم من الحلقة، ويجب تحديد الكلمة المفتاحية EXIT بشكل صريح.

بنية الحلقة الأساسية في لغة PL/SQL

LOOP
<execution block starts>
<EXIT condition based on developer criteria>
<execution_block_ends>
END LOOP;

شرح بناء الجملة:

  • تشير الكلمة المفتاحية 'LOOP' إلى بداية الحلقة وتشير 'END LOOP' إلى نهايتها.
  • تحتوي كتلة التنفيذ على جميع التعليمات البرمجية التي يجب تشغيلها، بما في ذلك شرط الخروج.
  • يمكن أن يحتوي جزء التنفيذ على أي عبارة قابلة للتنفيذ.

ملاحظة: عبارة التكرار الأساسية بدون كلمة EXIT هي حلقة تكرار لا نهائية لا تتوقف أبدًا.

مثال 1: في هذا المثال، نقوم بطباعة الأرقام من 1 إلى 5 باستخدام عبارة حلقة أساسية.

طباعة الأرقام من 1 إلى 5 باستخدام حلقة أساسية

DECLARE
a NUMBER:= 1;
BEGIN
dbms_output.put_line('Program started.');
LOOP
dbms_output.put_line(a);
a:= a+1;
EXIT WHEN a>5;
END LOOP;
dbms_output.put_line('Program completed');
END;
/

Code التفسير:

  • Code السطر 2: تعريف المتغير 'a' على أنه 'NUMBER' وتهيئته بالقيمة '1'.
  • Code السطر 4: طباعة عبارة "بدأ البرنامج".
  • Code السطر 5: تشير الكلمة المفتاحية 'LOOP' إلى بداية الحلقة.
  • Code السطر 6: يطبع قيمة "أ".
  • Code السطر 7: يزيد قيمة 'a' بمقدار 1.
  • Code السطر 8: للتحقق مما إذا كانت قيمة "a" أكبر من 5.
  • Code السطر 9: تشير الكلمة المفتاحية 'END LOOP' إلى نهاية كتلة التنفيذ.
  • تستمر الأسطر من 6 إلى 8 في التنفيذ حتى تصل قيمة 'a' إلى 6، وعند هذه النقطة يعود الشرط إلى TRUE ويخرج التحكم من الحلقة.
  • Code السطر 10: طباعة عبارة "تم إكمال البرنامج".

وضع العلامات على الحلقات

في لغة PL/SQL، يمكن تسمية الحلقات. يجب وضع التسمية بين علامتي "<<" و ">>". تُحسّن تسمية الحلقات، وخاصةً الحلقات المتداخلة، من سهولة قراءة الكود. يمكن استخدام التسمية في أمر EXIT للخروج من تلك الحلقة تحديدًا، بحيث يمكن التحكم في الخروج من الحلقة الخارجية لبنية متداخلة مباشرةً عن طريق كتابة أمر EXIT متبوعًا بتسمية الحلقة الخارجية.

بنية الحلقة المتداخلة المصنفة

<<OUTER_LOOP>>
LOOP
<execution_block_starts>
.
<<INNER_LOOP>>
LOOP --inner
<execution_part>
END LOOP;
.
<execution_block_ends>
END LOOP;

شرح بناء الجملة:

  • تحتوي الحلقة الخارجية على حلقة أخرى بداخلها.
  • '< >' و '< > هي تسميات هذه الحلقات.

مثال 1: في هذا المثال، نطبع الأرقام بدءًا من 1 باستخدام حلقة تكرار بسيطة. يُطبع كل رقم بعدد مرات يساوي قيمته. الحد الأعلى للسلسلة مُحدد في جزء التصريح. نستخدم مفهوم التسمية لتحقيق ذلك.

مثال على حلقة مُعَلَّمة - الجزء الثانيمثال على حلقة مُعَلَّمة - الجزء الثاني

DECLARE
a NUMBER:= 0;
b NUMBER;
upper_limit NUMBER := 4;
BEGIN
dbms_output.put_line('Program started.');
<<outer_loop>>
LOOP
a:= a+1;
b:= 1;
<<inner_loop>>
LOOP
EXIT outer_loop WHEN a > upper_limit;
dbms_output.put_line(a);
b:= b+1;
EXIT inner_loop WHEN b>a;
END LOOP;
END LOOP;
dbms_output.put_line('Program completed.');
END;
/

Code التفسير:

  • Code الأسطر 2-3: تعريف المتغيرين 'a' و 'b' كنوع بيانات 'NUMBER'.
  • Code السطر 4: تعريف المتغير 'upper_limit' كـ 'NUMBER' بقيمة '4'.
  • Code السطر 6: طباعة عبارة "بدأ البرنامج".
  • Code السطر 7: الحلقة الخارجية تحمل اسم "outer_loop".
  • Code السطر 9: يتم زيادة قيمة "أ" بمقدار 1.
  • Code السطر 11: الحلقة الداخلية تحمل اسم "inner_loop".
  • Code السطر 13: شرط الخروج الذي يتحقق مما إذا كانت قيمة 'a' أكبر من قيمة 'upper_limit'. إذا لم تكن كذلك، فإنه يتابع التنفيذ؛ وإلا فإنه يخرج من الحلقة الخارجية مباشرةً.
  • Code السطر 14: طباعة قيمة "ب".
  • Code السطر 15: يزيد قيمة 'b' بمقدار 1.
  • Code السطر 16: شرط الخروج الذي يتحقق مما إذا كانت قيمة 'b' أكبر من قيمة 'a'. إذا كان الأمر كذلك، فإنه يخرج من الحلقة الداخلية.
  • Code السطر 19: طباعة عبارة "تم إكمال البرنامج".

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

يُنهي الأمر EXIT الحلقة دون شروط. أما الأمر EXIT WHEN فيُنهيها فقط عندما يكون التعبير المنطقي التالي صحيحًا، مما يُغني عن الحاجة إلى شرط IF منفصل حول الأمر EXIT العادي.

تتيح التسمية لأمر الخروج (EXIT) في حلقة داخلية مغادرة حلقة خارجية مُسماة في خطوة واحدة. كما أنها تجعل قراءة التعليمات البرمجية المتداخلة أسهل بكثير من tracعبارات نهاية الحلقة (END LOOP) في لغة King Plain.

إذا لم يكن للكتلة شرط خروج، أو لم يصل العداد إلى شرط الخروج، فلن تتوقف الحلقة. تأكد دائمًا من أن العداد يتغير باتجاه شرط الخروج عند الوصول إلى شرط الخروج.

نعم، في كثير من الأحيان. يمكن للذكاء الاصطناعي أن يفعل ذلك. trace ما إذا كان العداد يتحرك نحو حالة الخروج والتحذير عندما لا يكون للحلقة مخرج يمكن الوصول إليه، على الرغم من أن الخروج المعتمد على البيانات لا يزال بحاجة إلى تشغيل اختبار للتأكيد.

يتخطى الأمر CONTINUE باقي التكرار الحالي وينتقل إلى التكرار التالي. وهو مفيد عندما يجب تجاهل قيم معينة دون الخروج من الحلقة بالكامل.

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