Oracle PL/SQL إذا كان هناك بيان آخر: ELSIF، NESTED-IF

ما هي بيانات صنع القرار؟

بيانات اتخاذ القرار هم الذين سيقررون التحكم في التدفق SQL تصريحات بناء على الشروط. إنه يمنح المبرمج تحكمًا أفضل في منع تنفيذ كود معين (الرسم البياني 1) أو اختيار الكود المطلوب بناءً على الشرط (الرسم البياني 2). يوجد أدناه تمثيل مصور لـ "بيان اتخاذ القرار".

مخطط بيان اتخاذ القرار
مخطط بيان اتخاذ القرار

أنواع بيانات اتخاذ القرار:

Oracle يوفر الأنواع التالية من بيانات اتخاذ القرار.

  • اذا ثم
  • إذا، ثم، آخر
  • إذا-ثم-إلسيف
  • متداخلة-إذا
  • هيكل الساعة:
  • حالة تم البحث فيها

بيان إذا-ثم

يتم استخدام عبارة IF-THEN بشكل أساسي لتنفيذ قسم معين من الأكواد فقط عند استيفاء الشرط.

يجب أن تسفر الحالة منطقية (صواب/خطأ). إنها عبارة عن عبارة شرطية أساسية تسمح لبرنامج ORACLE بتنفيذ/تخطي جزء معين من التعليمات البرمجية استنادًا إلى الشروط المحددة مسبقًا.

بناء جملة عبارات IF THEN:

IF <condition: returns Boolean>
THEN
 -executed only if the condition returns TRUE 
 <action_block>
END if;
  • في بناء الجملة أعلاه، الكلمة الأساسية "IF" سيتبعها شرط يتم تقييمه إلى "TRUE"/"FALSE".
  • سيتم تنفيذ عنصر التحكم إلا إذا عادت الحالة .
  • في حالة تقييم الحالة ل بعد ذلك، سوف يتخطى SQL وسيبدأ في تنفيذ الكود بجوار كتلة "END IF".

ملحوظة: عندما يتم تقييم الشرط على أنه "NULL"، فسوف تتعامل SQL مع "NULL" على أنه "FALSE".

مثال 1:في هذا المثال، سنقوم بطباعة رسالة عندما يكون الرقم أكبر من 100. لذلك، سنقوم بتنفيذ الكود التالي

لطباعة رسالة عندما يكون الرقم ذو قيمة أكبر من 100، نقوم بتنفيذ الكود التالي.

DECLARE 
a NUMBER :=10;
BEGIN
dbms_output.put_line(‘Program started.' );
IF( a > 100 ) THEN
dbms_output.put_line('a is greater than 100'); 
END IF;
dbms_output.put_line(‘Program completed.');
END;
/

شرح الكود:

  • سطر الكود 2: الإعلان عن المتغير "a" كنوع بيانات "NUMBER" وتهيئته بالقيمة "10".
  • سطر الكود 4: طباعة العبارة "بدأ البرنامج".
  • سطر الرمز 5: التحقق من الحالة، ما إذا كان المتغير "a" أكبر من "100".
  • سطر الرمز 6: إذا كان "a" أكبر من "100"، فستتم طباعة "a أكبر من 100". إذا كان "a" أقل من أو يساوي 100، فسيفشل الشرط، لذلك يتم تجاهل بيان الطباعة أعلاه.
  • سطر الرمز 8: طباعة العبارة "اكتمل البرنامج".

إخراج الكود:

Program started.
Program completed.

مثال 2: في هذا المثال، سنقوم بطباعة رسالة إذا كانت هناك أبجدية معينة موجودة في حروف العلة الإنجليزية (A، E، I، O، U).

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

DECLARE 
a CHAR(1) :=’u’;
BEGIN
IF UPPER(a) in ('A’,'E','I','0','U' ) THEN 
dbms_output.put_line(‘The character is in English Vowels');
END IF;
END;
/

شرح الكود:

  • سطر الكود 2: الإعلان عن المتغير "a" كـ "CHAR" من نوع البيانات بالحجم "1" وتهيئته بالقيمة "u".
  • سطر الكود 4: التحقق من الحالة، ما إذا كان المتغير 'a' موجودًا في القائمة ('A'،'E'،'I'،'O'،'U').
  • تم تحويل قيمة "a" إلى أحرف كبيرة قبل المقارنة لجعل المقارنة غير حساسة لحالة الأحرف.
  • سطر الكود 5: إذا كان الحرف "a" موجودًا في القائمة، فسيتم طباعة العبارة "الحرف بأحرف العلة الإنجليزية". إذا فشل الشرط، فلن يعطي هذا البرنامج أي مخرجات، لأننا خارج كتلة IF-THEN لم نصدر أي بيان طباعة.

إخراج الكود:

The character is in English Vowels

بيان إذا-ثم-آخر

  • يتم استخدام عبارة IF-THEN-ELSE بشكل أساسي للاختيار بين بديلين بناءً على الشرط.
  • يوجد أدناه تمثيل بناء الجملة لعبارة IF-THEN-ELSE.

بناء جملة عبارات IF-THEN-ELSE:

IF <condition: returns Boolean>
THEN
	-executed only if the condition returns TRUE
	<action_blockl>
ELSE
	-execute if the condition failed (returns FALSE)
	<action_block2>
END if;
  • في بناء الجملة أعلاه، الكلمة الأساسية "IF" سيتبعها شرط يتم تقييمه إلى "TRUE"/"FALSE".
  • سيتم تنفيذ عنصر التحكم إلا إذا عادت الحالة .
  • في حالة تقييم الحالة ل ثم سيتم تنفيذ SQL .
  • على أية حال، سيتم تنفيذ إحدى كتلتي الإجراء.

ملحوظة: عندما يتم تقييم الشرط إلى "NULL"، فسوف تتعامل SQL مع "NULL" على أنه "FALSE".

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

DECLARE 
a NUMBER:=11;
BEGIN
dbms_output.put_line (‘Program started');
IF( mod(a,2)=0) THEN 
dbms_output.put_line('a is even number' ); 
ELSE
dbms_output.put_line('a is odd number1); 
END IF;
dbms_output.put_line (‘Program completed.’);
END;
/

شرح الكود:

  • سطر الكود 2: الإعلان عن المتغير "a" كنوع بيانات "NUMBER" وتهيئته بالقيمة "11".
  • سطر الكود 4: طباعة العبارة "بدأ البرنامج".
  • سطر الكود 5: التحقق من الحالة، ما إذا كان معامل المتغير 'a' بواسطة '2' هو 0.
  • سطر الرمز 6: إذا كان الرقم '0'، فستتم طباعة "a هو رقم زوجي".
  • سطر الكود 7: إذا كانت قيمة المعامل لا تساوي '0'، فسيتم إرجاع الشرط ، لذلك ستتم طباعة الرسالة "a هو رقم فردي".
  • سطر الكود 10: طباعة عبارة "اكتمل البرنامج"

إخراج الكود:

Program started.
a is odd number
Program completed.

بيان IF-THEN-ELSIF

  • يتم استخدام عبارة IF-THEN-ELSIF بشكل أساسي حيث يجب اختيار بديل واحد من مجموعة من البدائل، حيث يكون لكل بديل شروطه الخاصة التي يجب استيفائها.
  • أول الشروط التي تعود سيتم تنفيذه، وسيتم تخطي الشروط المتبقية.
  • قد تحتوي عبارة IF-THEN-ELSIF على كتلة "ELSE" بداخلها. سيتم تنفيذ الكتلة "ELSE" هذه في حالة عدم استيفاء أي من الشروط.

ملاحظات: كتلة ELSE اختيارية في هذا البيان الشرطي. إذا لم يكن هناك كتلة ELSE، ولم يتم استيفاء أي من الشروط، فستتخطى وحدة التحكم كل كتلة الإجراء وتبدأ في تنفيذ الجزء المتبقي من التعليمات البرمجية.

بناء جملة عبارات IF-THEN-ELSIF:

IF <conditionl: returns Boolean>
THEN
-executed only if the condition returns TRUE <
action_blockl>
ELSIF <condition2 returns Boolean> <
action_block2>
ELSIF <condition3:returns Boolean> <
action_block3>
ELSE —optional 
<action_block_else>
END if;
  • في بناء الجملة أعلاه، سيتم تنفيذ عنصر التحكم فقط إذا عاد الشرط 1 .
  • إذا لم يتم استيفاء الشرط 1، فستقوم وحدة التحكم بالتحقق من الشرط 2.
  • سيخرج المتحكم من عبارة IF في الحالتين التاليتين.
    • عندما وجدت وحدة التحكم أي شرط يعود . في هذه الحالة، سيتم تنفيذ الإجراء action_block المقابل وستخرج وحدة التحكم من كتلة بيان IF هذه وستبدأ في تنفيذ التعليمات البرمجية المتبقية.
    • عندما لا يتم استيفاء أي من الشروط، ستقوم وحدة التحكم بتنفيذ كتلة ELSE إذا كانت موجودة، ثم ستخرج من بيان IF.

ملحوظة: عندما يتم تقييم الشرط إلى "NULL"، فسوف تتعامل SQL مع "NULL" على أنه "FALSE".

مثال 1: بدون كتلة أخرى

في هذا المثال، سنقوم بطباعة الدرجة بناءً على العلامات المعطاة دون شرط آخر (علامة > = 70 درجة أ، علامة > = 40 وعلامة > 70 درجة ب، علامة > = 35 وعلامة > 40 درجة ج).

DECLARE
mark NUMBER :=55;
BEGIN
dbms_output.put_line(‘Program started.’ );
IF( mark >= 70) THEN 
dbms_output.put_line(‘Grade A’);
ELSIF(mark >= 40 AND mark < 70) THEN
dbms_output.put_line(‘Grade B'); 
ELSIF(mark >=35 AND mark < 40) THEN
dbms_output.put_line(‘Grade C’);
END IF;
dbms_output.put_line(‘Program completed.’); 
END;
/

شرح الكود:

  • سطر الكود 2: الإعلان عن المتغير "علامة" كنوع بيانات "NUMBER" وتهيئته بالقيمة "55".
  • سطر الكود 4: طباعة العبارة "بدأ البرنامج".
  • سطر الكود 5: التحقق من الحالة 1، سواء كانت "العلامة" أكبر أو تساوي 70.
  • سطر الكود 7: منذ فشل الشرط 1، تم تحديد الشرط 2 '70>علامة>=40'.
  • سطر الكود 8: إرجاع condtition2 ومن ثم ستتم طباعة الرسالة "الدرجة ب".
  • سطر الكود 12: طباعة عبارة "اكتمل البرنامج".
  • في هذه الحالة، سيتم تخطي الشرط 3 'علامة < 35'، حيث وجدت وحدة التحكم شرطًا واحدًا يتم إرجاعه قبل الشرط3.

إخراج الكود:

Program started.
Grade B
Program completed.

مثال 2: مع كتلة أخرى

في هذا المثال، سنقوم بطباعة الدرجة بناءً على العلامات المحددة مع شرط آخر (علامة >= 70 درجة أ، علامة >=40 وعلامة<70 درجة ب، علامة >=35 وعلامة<40 درجة ج، وإلا) "لا يوجد درجة").

DECLARE
mark NUMBER :=25;
BEGIN
dbms_output.put_line(‘Program started.’ );
IF( mark >= 70) THEN 
dbms_output.put_line(‘Grade A’); 
ELSIF(mark >= 40 AND mark < 70) THEN 
dbms_output.put_line(‘Grade B'); 
ELSIF(mark >=35 AND mark < 40) THEN 
dbms_output.put_line(‘Grade C);
ELSE
dbms_output.put_line(‘No Grade’);
END IF;
dbms_output.put_line(‘Program completed.' ); 
END;
/

شرح الكود:

  • سطر الكود 2: الإعلان عن المتغير "علامة" كنوع بيانات "NUMBER" وتهيئته بالقيمة "25".
  • سطر الكود 4: طباعة العبارة "بدأ البرنامج".
  • سطر الكود 5: التحقق من الشرط 1 ما إذا كانت "العلامة" أكبر أو تساوي 70.
  • سطر الكود 7: منذ فشل الشرط 1، تم تحديد الشرط 2 '70>علامة>=40'.
  • سطر الكود 8: منذ فشل الشرط 2، تم تحديد الشرط 3 '40>علامة>=35'.
  • سطر الكود 11: نظرًا لفشل جميع الشروط، سيتحقق التحكم الآن من وجود كتلة ELSE، وسيقوم بطباعة الرسالة "لا يوجد تقدير" من كتلة ELSE.
  • سطر الكود 14: طباعة عبارة "اكتمل البرنامج".

إخراج الكود:

Program started.
No Grade 
Program completed.

بيان NESTED-IF

  • تسمح عبارة NESTED-IF بشكل أساسي للمبرمجين بوضع شرط "IF" واحد أو أكثر داخل شرط "IF" آخر بخلاف التصريحات العادية.
  • يجب أن يحتوي كل شرط "IF" على عبارة "END IF" منفصلة تحدد نهاية نطاق ذلك الشرط .
  • ستعتبر عبارة "IF" عبارة "END IF" الأقرب بمثابة نقطة نهاية لهذا الشرط المعين.
  • يظهر التمثيل التصويري لـ NESTED-IF في الرسم البياني أدناه.

بيان NESTED-IF

بيان NESTED-IF

IF <conditionl: returns Boolean>
THEN
	—executed only if the condition returns TRUE
	<action block1 starts>
	IF <condition2: returns Boolean>
	THEN
	<action_block2>
	END IF; —END IF corresponds to condition2
<action_blockl ends>
END IF; —END IF corresponds to condition1

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

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

سنرى هنا مثالاً على Nested If –

مثال على عبارة If المتداخلة: الأكبر من ثلاثة أرقام

في هذا المثال، سنطبع أكبر ثلاثة أرقام باستخدام عبارة Nested-If. سيتم تعيين الأرقام في جزء الإعلان، كما يمكنك أن ترى في الكود أدناه، أي Number= 10,15 و20 وXNUMX وسيتم جلب العدد الأقصى باستخدام عبارات Nested-If.

DECLARE 
a NUMBER :=10; 
b NUMBER :=15; 
c NUMBER :=20;
BEGIN
dbms_output.put_line(‘Program started.' );
IF( a > b)THEN
/*Nested-if l */
	dbms_output.put_line(’Checking Nested-IF 1'); 
	IF( a > c ) THEN
	dbms_output.put_line(‘A is greatest’); 
	ELSE
	dbms_output.put_line(‘C is greatest’); 
	END IF;
ELSE
/*Nested-if2 */
	dbms_output.put_line('Checking Nested-IF 2' ); 
	IF( b > c ) THEN
	dbms_output.put_line(’B is greatest' ); 
	ELSE
	dbms_output.put_line(’C is greatest' ); 
	END IF;
END IF;
dbms_output.put_line(‘Program completed.’ );
END;
/

شرح الكود:

  • سطر الكود 2: الإعلان عن المتغير "a" كنوع بيانات "NUMBER" وتهيئته بالقيمة "10".
  • سطر الكود 3: الإعلان عن المتغير "b" كنوع بيانات "NUMBER" وتهيئته بالقيمة "15".
  • سطر الكود 4: الإعلان عن المتغير "c" كنوع بيانات "NUMBER" وتهيئته بالقيمة "20".
  • سطر الكود 6: طباعة العبارة "بدأ البرنامج" (السطر 6).
  • سطر الرمز 7: التحقق من الحالة 1، ما إذا كان "أ" أكبر من "ب" (السطر 7).
  • سطر الرمز 10: إذا كان "a" أكبر من "b"، فإن الشرط في "nested-if 1" سيتحقق مما إذا كان "a" أكبر من "c" (السطر 10).
  • سطر الرمز 13: إذا كان لا يزال "a" أكبر، فستتم طباعة الرسالة "A is great" (السطر 11). وإلا، إذا فشل الشرط 2، فسيتم طباعة "C هو الأعظم" (السطر 13).
  • سطر الكود 18: في حالة إرجاع الشرط 1 خطأ، فإن الشرط في "متداخل-إذا 2" سيتحقق مما إذا كان "ب" أكبر من "ج" (السطر 18).
  • سطر الرمز 21: إذا كان "b" أكبر من "c"، فستتم طباعة الرسالة "B is great" (السطر 19)، وإلا إذا فشل الشرط 2، فستتم طباعة "C is great" (السطر 21).
  • سطر الرمز 24: طباعة عبارة "اكتمل البرنامج" (السطر 24).

إخراج الكود:

Program started.
Checking Nested-IF 2
C is greatest
Program completed.

الملخص

لقد تعلمنا في هذا الفصل بيانات اتخاذ القرار المختلفة وتركيبها وأمثلة عليها. يقدم الجدول أدناه ملخصًا لمختلف البيانات الشرطية التي ناقشناها.

النوع الوصف الاستعمال
اذا ثم التحقق من الشرط المنطقي، إذا كان سيتم تنفيذ الكود TRUE في الكتلة "THEN". لتخطي/تنفيذ رمز معين بناءً على الشرط.
إذا، ثم، آخر التحقق من الشرط المنطقي، إذا تم تنفيذ التعليمات البرمجية TRUE في الكتلة "THEN"، وإذا تم تنفيذ التعليمات البرمجية الخاطئة في الكتلة "ELSE". الأنسب في حالة "هذا أو ذاك".
إذا-ثم-إلسيف التحقق من الشرط المنطقي بترتيب تسلسلي. سيتم تنفيذ الكتلة الأولى في التسلسل التي تُرجع الشرط TRUE. إذا لم يكن أي من الشروط في التسلسل صحيحًا، فسيتم تنفيذ التعليمات البرمجية الموجودة في الكتلة "ELSE". تستخدم للاختيار من بين أكثر من بديلين في الغالب.
متداخلة-إذا يسمح بواحدة أو أكثر من عبارة IF-THEN أو IF-THEN-ELSIF داخل عبارة (عبارات) IF-THEN أو IF-THEN-ELSIF أخرى. تستخدم بشكل رئيسي في حالة الحالة المتداخلة.