6 – исполняемый раздел

7 BEGIN

8 lamda := &Input_Data;

9 DBMS_OUTPUT.PUT_LINE('');

10 IF (lamda > 0.65)

11 THEN DBMS_OUTPUT.PUT_LINE(text1);

12 ELSIF (lamda < 0.41)

13 THEN DBMS_OUTPUT.PUT_LINE(text3);

14 ELSE

15 DBMS_OUTPUT.PUT_LINE(text2);

16 END IF;

17 END;

/

Enter value for input_data: 0.33

old 8: lamda := &Input_Data;

new 8: lamda := 0.33;

Ультрафиолет

PL/SQL procedure successfully completed.

При сложной логике ветвления и проверке многочисленных условий рекомендуется вместо вложенных команд IF использовать условную команду CASE, так как с ней получается более понятный и компактный код.

Условная команда CASE

Команда CASE имеет две разновидности:

простая команда CASE, которая связывает одну или несколько последовательностей команд PL/SQL с некоторыми значениями (выполняемая последовательность команд выбирается при совпадении результата вычисления заданного выражения со значением, связанным с этой последовательностью команд);

поисковая команда CASE, которая выбирает для выполнения последовательность команд в зависимости от результатов проверки списка логических условий (выполняется последовательность команд, связанная с первым логическим условием в списке, результат проверки которого оказался равным TRUE).

Несмотря на громоздкое описание, работать с командой CASE обеих разновидностей просто и удобно.

Простая команда CASE имеет следующий синтаксис:

CASE выражение

WHEN результат 1 THEN

последовательность команд 1;

WHEN результат 2 THEN

последовательность команд 2;

ELSE

альтернативная последовательность команд;

END CASE;

Простая команда CASE обычно используется для избавления от многочисленных команд IF и конструкций ELSE в них путем формирования хорошо структурированных ветвей кода в зависимости от списка значений, которые может принимать некоторая управляющая переменная. Приведем пример поиска слова на русском языке по английскому аналогу:

SQL> DECLARE

2 english_termin VARCHAR2(20);

3 text1 VARCHAR2(30) := 'Инфракрасное излучение';

4 text2 VARCHAR2(30) := 'Видимый свет';

5 text3 VARCHAR2(30) := 'Ультрафиолет';

6 text4 VARCHAR2(30) := 'Неизвестный термин';

7 BEGIN

8 english_termin := &Input_Data;

9 CASE english_termin

10 WHEN 'Infrared radiation' THEN DBMS_OUTPUT.PUT_LINE(text1);

11 WHEN 'Visible light' THEN DBMS_OUTPUT.PUT_LINE(text2);

12 WHEN 'Ultraviolet' THEN DBMS_OUTPUT.PUT_LINE(text3);

13 ELSE DBMS_OUTPUT.PUT_LINE(text4);

14 END CASE;

15 END;

16 /


Enter value for input_data: 'Ultraviolet'

old 8: english_termin := &Input_Data;

new 8: english_termin := 'Ultraviolet';

Ультрафиолет


PL/SQL procedure successfully completed.

Поисковая команда CASE имеет следующий синтаксис:

CASE

WHEN верно логическое условие 1 THEN

последовательность команд 1;

WHEN верно логическое условие 2 THEN

последовательность команд 2;

ELSE

альтернативная последовательность команд;

END CASE;

Перепишем пример определения источника излучения с использованием поисковой команды CASE вместо команды IF (сравните с предыдущей версией):

SQL> DECLARE

2 lamda NUMBER;

3 text1 VARCHAR2(30) := 'Инфракрасное излучение';

4 text2 VARCHAR2(30) := 'Видимый свет';

5 text3 VARCHAR2(30) := 'Ультрафиолет';

6 BEGIN

7 lamda := &Input_Data;

8 CASE

9 WHEN (lamda > 0.65)

10 THEN DBMS_OUTPUT.PUT_LINE(text1);

11 WHEN (Lamda < 0.41)

12 THEN DBMS_OUTPUT.PUT_LINE(text3);

13 ELSE

14 DBMS_OUTPUT.PUT_LINE(text2);

15 END CASE;

16 END;

17 /

Enter value for input_data: 0.50

old 7: lamda := &Input_Data;

new 7: lamda := 0.50;

Видимый свет


PL/SQL procedure successfully completed.

Помимо условной команды CASE, в PL/SQL есть выражение CASE, которое последовательно вычисляет логические выражения из заданного списка, пока одно из них не станет истинным, а затем возвращает результат связанного с ним выражения. В этом заключается отличие выражения CASE от команды CASE – команда CASE управляет потоком других команд, а выражение CASE вычисляется и его значение может быть присвоено переменным, использовано в других выражениях и т. д.