بيان الحالة في Oracle بل/SQL مع أمثلة
⚡ ملخص ذكي
تختار عبارة CASE في لغة PL/SQL بديلاً واحداً من بين عدة بدائل بناءً على مُحدِّد، على غرار عبارة IF-THEN-ELSIF ولكن بشكل أوضح. تُطابق عبارة CASE البسيطة قيمة المُحدِّد، بينما تُقيِّم عبارة CASE المُبحثة شرطاً في كل جملة WHEN وتُنفِّذ أول شرط صحيح.

ما هي عبارة CASE؟
عبارة CASE تشبه عبارة IF-THEN-ELSIF؛ فهي تختار بديلاً واحداً بناءً على شرط من الخيارات المتاحة.
- تستخدم عبارة CASE "محددًا" بدلاً من تعبير منطقي لاختيار التسلسل.
- تُعامل قيمة التعبير في عبارة CASE كمحدد.
- يمكن أن يكون التعبير من أي نوع (حسابي، متغيرات، إلخ).
- يتم تعيين قيمة محددة مسبقًا (محدد) لكل بديل، ويتم تنفيذ البديل الذي تتطابق قيمة المحدد الخاصة به مع قيمة التعبير الشرطي.
- على عكس IF-THEN-ELSIF، يمكن أيضًا استخدام عبارة CASE في عبارات SQL.
- تحتوي كتلة ELSE في عبارة CASE على التسلسل الذي سيتم تنفيذه عندما لا يتم تحديد أي من البدائل.
بناء الجملة
CASE (expression) WHEN <value1> THEN action_block1; WHEN <value2> THEN action_block2; WHEN <value3> THEN action_block3; ELSE action_block_default; END CASE;
- في الصيغة المذكورة أعلاه، يُرجع التعبير قيمة يمكن أن تكون من أي نوع.
- كل عبارة "متى" هي بديل له و .
- يتم تحديد عبارة "WHEN" التي تتطابق قيمتها مع التعبير، و يتم تنفيذه.
- كتلة "ELSE" اختيارية وتحتوي على للتنفيذ عندما لا يوجد بديل مطابق.
- يشير الرمز "END" إلى نهاية عبارة CASE وهو جزء إلزامي من CASE.
مثال 1: العمليات الحسابية باستخدام CASE
في هذا المثال، نقوم بإجراء عملية حسابية بين رقمين، 55 و 5.
DECLARE a NUMBER := 55; b NUMBER := 5; arth_operation VARCHAR2(20) := 'MULTIPLY'; BEGIN dbms_output.put_line('Program started.'); CASE (arth_operation) WHEN 'ADD' THEN dbms_output.put_line('Addition of the numbers are: '|| a+b ); WHEN 'SUBTRACT' THEN dbms_output.put_line('Subtraction of the numbers are: '||a-b ); WHEN 'MULTIPLY' THEN dbms_output.put_line('Multiplication of the numbers are: '|| a*b ); WHEN 'DIVIDE' THEN dbms_output.put_line('Division of the numbers are:'|| a/b); ELSE dbms_output.put_line('No operation action defined. Invalid operation'); END CASE; dbms_output.put_line('Program completed.'); END; /
Code تفسير
- Code السطر 2: تعريف المتغير 'a' على أنه 'NUMBER' وتهيئته بالقيمة '55'.
- Code السطر 3: تعريف المتغير 'b' على أنه 'NUMBER' وتهيئته بالقيمة '5'.
- Code السطر 4: تعريف المتغير 'arth_operation' كـ 'VARCHAR2' بحجم 20 وتهيئته بالقيمة 'MULTIPLY'.
- Code السطر 6: طباعة العبارة "بدأ البرنامج".
- Code السطر 7: يتحقق CASE من قيمة التعبير. هنا، قيمة 'arth_operation' هي 'MULTIPLY'، والتي تُعامل كمحدد.
- Code السطر 10: عبارة WHEN ذات القيمة 'MULTIPLY' تطابق المحدد، لذلك يقوم المتحكم بتحديد كتلة الإجراء هذه ويطبع "محصلة الأرقام هي: 275".
- Code السطر 13: يمثل نهاية عبارة CASE.
- Code السطر 14: طباعة العبارة "تم إكمال البرنامج".
Code الناتج
Program started. Multiplication of the numbers are: 275 Program completed.
بيان الحالة التي تم البحث فيها
إن عبارة CASE التي تم البحث عنها تشبه عبارة CASE، ولكن بدلاً من استخدام محدد لاختيار البديل، فإن عبارة CASE التي تم البحث عنها تحتوي على الشرط المحدد مباشرة في عبارة WHEN.
- يتم تنفيذ أول شرط WHEN يحقق الشرط، ويتخطى المتحكم البدائل المتبقية.
بناء الجملة
CASE WHEN <expression1> THEN action_block1; WHEN <expression2> THEN action_block2; WHEN <expression3> THEN action_block3; ELSE action_block_default; END CASE;
- في الصيغة المذكورة أعلاه، تحتوي كل جملة WHEN على جملة منفصلة و .
- يتم تنفيذ عبارة WHEN التي تُرجع فيها العبارة القيمة TRUE.
- كتلة "ELSE" اختيارية وتحتوي على للتنفيذ عندما لا يتم استيفاء أي من البدائل.
- يشير الرمز "END" إلى نهاية عبارة CASE وهو جزء إلزامي من CASE.
مثال 1: عملية حسابية باستخدام حالة البحث
في هذا المثال، نقوم بإجراء عملية حسابية بين رقمين، 55 و 5.
DECLARE a NUMBER := 55; b NUMBER := 5; arth_operation VARCHAR2(20) := 'DIVIDE'; BEGIN dbms_output.put_line('Program started.'); CASE WHEN arth_operation = 'ADD' THEN dbms_output.put_line('Addition of the numbers are: '||a+b ); WHEN arth_operation = 'SUBTRACT' THEN dbms_output.put_line('Subtraction of the numbers are: '|| a-b); WHEN arth_operation = 'MULTIPLY' THEN dbms_output.put_line('Multiplication of the numbers are: '|| a*b ); WHEN arth_operation = 'DIVIDE' THEN dbms_output.put_line('Division of the numbers are: '|| a/b ); ELSE dbms_output.put_line('No operation action defined. Invalid operation'); END CASE; dbms_output.put_line('Program completed.'); END; /
Code تفسير
- Code السطر 2: تعريف المتغير 'a' على أنه 'NUMBER' وتهيئته بالقيمة '55'.
- Code السطر 3: تعريف المتغير 'b' على أنه 'NUMBER' وتهيئته بالقيمة '5'.
- Code السطر 4: تعريف المتغير 'arth_operation' كـ 'VARCHAR2' بحجم 20 وتهيئته بالقيمة 'DIVIDE'.
- Code السطر 6: طباعة العبارة "بدأ البرنامج".
- Code السطر 7: تبدأ عبارة CASE التي تم البحث عنها. بنود ADD و SUBTRACتم تخطي T و MULTIPLY، لأن شروطهما لا تتطابق مع قيمة 'arth_operation'.
- Code السطر 14: يتم استيفاء تعبير جملة WHEN "arth_operation = 'DIVIDE'" ويعيد القيمة TRUE.
- Code السطر 15: يتم تنفيذ كتلة الإجراء الخاصة بعبارة WHEN، ويتم طباعة "قسمة الأرقام هي: 11".
- Code السطر 17: يمثل نهاية عبارة CASE.
- Code السطر 18: طباعة العبارة "تم إكمال البرنامج".
Code الناتج
Program started. Division of the numbers are: 11 Program completed.
مقارنة بين الحالة والحالة التي تم البحث عنها
يختار كلا النموذجين فرعًا واحدًا، لكنهما يختلفان في كيفية اختيار الفرع، كما هو ملخص أدناه.
| النوع | الوصف | الأستعمال |
|---|---|---|
| الحالات | وعلى غرار إذا-ثم-إلسيف يُستخدم "المحدد" لاختيار البديل بدلاً من التعبير المنطقي. | تُستخدم للاختيار من بين عدة بدائل باستخدام أداة تحديد. |
| حالة تم البحث فيها | عبارة CASE بدون مُحدِّد فعلي. بدلاً من ذلك، تحتوي على الشرط (الذي يُقيَّم إلى صحيح أو خطأ) الذي يختار البديل. | يُستخدم للاختيار من بين أكثر من بديلين، وغالبًا ما يكون ذلك ضمن شروط النطاق. |
