последовательность команд 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);