Oracle حلقة PL/SQL مع مثال
⚡ ملخص ذكي
تُنفّذ حلقات PL/SQL جزءًا من التعليمات البرمجية بشكل متكرر لعدد محدد من المرات. توفر PL/SQL حلقات أساسية، وحلقات FOR، وحلقات WHILE، يتم التحكم بها بواسطة أوامر CONTINUE وEXIT وEXIT WHEN وGOTO، ويمكن تسمية الحلقات لإدارة البنى المتداخلة بشكل منظم.
ما هي الحلقات؟
تسمح الحلقات بتنفيذ جزء معين من الكود في البرنامج لعدد محدد من المرات. في هذا الدرس، سنتناول مفهوم الحلقات في لغة PL/SQL وتدفق التحكم فيها.
مقدمة لمفهوم الحلقات
يوفر مفهوم الحلقات المزايا التالية في البرمجة:
- إمكانية إعادة استخدام الكود.
- حجم الكود مُصغّر.
- سهولة التحكم.
- تبسيط أقل.
يوضح الرسم البياني أدناه المرحاضping مفهوم.
في الرسم التخطيطي أعلاه، يتم التحقق من شرط الحلقة، وطالما أنه يتم استيفاؤه، يتم تشغيل كتلة التنفيذ.
في كل تكرار، يتغير متغير عداد الحلقة الذي يحدد شرط الحلقة لإخراج البرنامج منها. في بعض الحالات، يكون هذا العداد عبارة عن زيادة أو نقصان لعدد محدد مسبقًا، وفي حالات أخرى يكون شرط بحث يستمر في تنفيذ الكتلة حتى يتحقق.
بيانات التحكم في الحلقة
قبل تعلم مفهوم الحلقات، من المهم تعلم عبارات التحكم في الحلقة. تتحكم هذه العبارات في تدفق التنفيذ داخل الحلقة.
متابعة
تُعلِم هذه الكلمة المفتاحية محرك PL/SQL بأنه عند مصادفة عبارة CONTINUE داخل حلقة تكرارية، فإنه يتخطى باقي التعليمات البرمجية في كتلة التنفيذ ويبدأ التكرار التالي فورًا. ويُستخدم هذا بشكل أساسي عندما يجب تخطي التعليمات البرمجية داخل الحلقة التكرارية لقيم تكرارية معينة.
خروج / خروج متى
تُوجّه هذه الكلمة المفتاحية مُحرك PL/SQL للخروج الفوري من الحلقة الحالية. في الحلقات المتداخلة، يُخرج الأمر EXIT في الحلقة الداخلية الحلقة الداخلية فقط، وليس الحلقة الخارجية. يتبع الأمر 'EXIT WHEN' تعبيرٌ يُعطي نتيجة منطقية؛ إذا كانت النتيجة TRUE، يتم الخروج من الحلقة.
GOTO
ينقل هذا البيان التحكم إلى بيان مُعَلَّم ("GOTO ;"). وله القيود التالية:
- يمكن أن يتم نقل السيطرة فقط ضمن البرامج الفرعية.
- لا يمكن نقل التحكم من جزء معالجة الاستثناءات إلى جزء التنفيذ.
لا يُنصح باستخدام هذا البيان إلا في حالة عدم وجود بديل، لأن التحكم في التعليمات البرمجية tracتصبح القدرة على التحكم صعبة للغاية عندما يتم نقل السيطرة من جزء إلى آخر.
أنواع الحلقات في PL/SQL
PL / SQL يوفر الأنواع الثلاثة التالية من الحلقات:
- بيان الحلقة الأساسية
- لبيان الحلقة
- أثناء بيان الحلقة
يوضح الجدول أدناه مقارنة بين الثلاثة قبل أن يتم تغطية الحلقة الأساسية بالتفصيل.
| أنشوطة | معايير الخروج | يُستخدم عند |
|---|---|---|
| حلقة أساسية | مخرج صريح في الكتلة | لا يعتمد الخروج على عدد أو شرط ثابت. |
| لحلقة | يصل العداد إلى نهاية مداه | عدد التكرارات معروف مسبقًا |
| حلقة WHILE | يصبح الشرط خاطئًا | يجب أن تستمر الحلقة طالما أن الشرط قائم |
بيان الحلقة الأساسية
هذا هو أبسط هيكل حلقة تكرارية في لغة PL/SQL. يبدأ جزء التنفيذ بالكلمة المفتاحية 'LOOP' وينتهي بالكلمة المفتاحية 'END LOOP'. يجب تحديد شرط الخروج داخل جزء التنفيذ لإخراج التحكم من الحلقة، ويجب تحديد الكلمة المفتاحية EXIT بشكل صريح.
LOOP <execution block starts> <EXIT condition based on developer criteria> <execution_block_ends> END LOOP;
شرح بناء الجملة:
- تشير الكلمة المفتاحية 'LOOP' إلى بداية الحلقة وتشير 'END LOOP' إلى نهايتها.
- تحتوي كتلة التنفيذ على جميع التعليمات البرمجية التي يجب تشغيلها، بما في ذلك شرط الخروج.
- يمكن أن يحتوي جزء التنفيذ على أي عبارة قابلة للتنفيذ.
ملاحظة: عبارة التكرار الأساسية بدون كلمة EXIT هي حلقة تكرار لا نهائية لا تتوقف أبدًا.
مثال 1: في هذا المثال، نقوم بطباعة الأرقام من 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: طباعة عبارة "تم إكمال البرنامج".







