Иван Задворьев - Язык PL/SQL
- Название:Язык PL/SQL
- Автор:
- Жанр:
- Издательство:Array SelfPub.ru
- Год:2018
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Иван Задворьев - Язык PL/SQL краткое содержание
Язык PL/SQL - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
END IF;
Команды первой ветви кода выполняются только тогда, когда проверка условия определяет его истинность (TRUE). Если же проверка условия определяет FALSE или UNKNOWN (например, при сравнении с NULL), то выполняются команды ELSE-ветви.
Приведем пример программы, которая выводит сообщение о классе излучения в зависимости от значения вводимого параметра длины волны (длина волны предполагается заданной в микронах).
SQL> DECLARE
2 lamda NUMBER; – Длина волны
3 text1 VARCHAR2(30) := 'Инфракрасное излучение';
4 text2 VARCHAR2(30) := 'Видимый свет';
5 text3 VARCHAR2(30) := 'Ультрафиолет';
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 вычисляется и его значение может быть присвоено переменным, использовано в других выражениях и т. д.
DECLARE
lamda NUMBER := 0.50;
text1 VARCHAR2(30) := 'Инфракрасное излучение';
text2 VARCHAR2(30) := 'Видимый свет';
text3 VARCHAR2(30) := 'Ультрафиолет';
answer VARCHAR2(30);
BEGIN
answer := CASE WHEN (lamda > 0.65) THEN text1
WHEN (Lamda < 0.41) THEN text3
ELSE text2
END;
DBMS_OUTPUT.PUT_LINE(answer);
END;
Команда перехода GOTO
Команда перехода GOTO позволяет осуществить переход по метке, присутствующей в коде PL/SQL. С помощью уникального идентификатора, заключенного в двойные угловые скобки (метки), можно пометить любую часть исполняемого блока PL/SQL для перехода в это место.
SQL> DECLARE
2 s NUMBER := 1;
3 BEGIN
4 IF s = 1 THEN
5 GOTO mybranch; – переход по метке mybranch
6 ELSE
7 s := 1;
8 END IF;
9 <> – установка метки mybranch
10 NULL;
11 END;
12 /
PL/SQL procedure successfully completed.
Команда GOTO в языках программирования является объектом критики, поскольку чрезмерное ее применение приводит к созданию нечитаемого «спагетти-кода». Впервые эта точка зрения была отражена в статье Эдсгера Дейкстры «Доводы против команды GOTO», в которой утверждалось, что квалификация программистов обратно зависит от частоты использования команды GOTO в их программах. Многие преподаватели не принимают написанные студентами программы с командами GOTO по той причине, что наличие GOTO свидетельствует о неумении правильно структурировать исходный код.
Команда NULL
Команда NULL («пустая» команда) обычно используется как «заглушка» в месте, где надо написать какую-нибудь команду, потому что ничего не написать там нельзя по требованиям синтаксиса PL/SQL. Потом, по мере появления определенности, «заглушка» заменяется на функциональный код:
CASE sex
WHEN 'М' THEN
sex_decoded := 'male';
WHEN 'F' THEN
sex_decoded := 'female';
ELSE
NULL; – toDo: write code for exception sex not in list {F,M} ;))
END CASE;
Также команда NULL используется при обработке исключений, когда обработка какого-нибудь исключения заключается в отсутствии каких-либо действий (ничегонеделании). Такая практика «замалчивания» исключений обычно не приветствуется, так как она приводит к сложно выявляемым проблемам и неожиданным результатам работы программ.
Циклы
В языке PL/SQL имеется три вида циклов:
простой цикл, который начинается с ключевого слова LOOP и завершается командой END LOOP;
цикл WHILE с предусловием, который позволяет выполнить одну и ту же последовательность команд, пока проверяемое условие истинно;
цикл FOR со счетчиком.
Простой цикл
Простой цикл рассмотрим на примере определения числа, факториал которого является наименьшим числом, впервые превышающим заданную константу (1 000 000 000).
Читать дальшеИнтервал:
Закладка: