- •Язык pl/sql
- •Блоки программы pl/sql
- •Основы программирования на языке pl/sql
- •Переменные программы
- •Управление ходом выполнения программы
- •Взаимодействие с базами данных
- •Объявление и использование подпрограмм: процедуры и функции
- •Работа с переменными типа запись
- •Атрибуты %type и %rowtype
- •Работа с курсорами
- •Встроенные пакеты утилит
- •Триггеры баз данных
- •Упражнение 4.21. Создание и использование триггеров базы данных
Управление ходом выполнения программы
Процедурные программы имеют определенный порядок выполнения содержащихся в ней операторов. Программы на языке PL/SQL могут управлять ходом исполнения операторов, используя:
итеративную логику (циклы);
условную логику (if-then-else);
последовательную логику (операторы перехода goto).
Для выполнения ряда операторов программы определенное количество раз в программе могут использоваться циклы. Рассмотрим анонимный блок, иллюстрирующий выполнение типичного цикла. Такой цикл начинается ключевым словом LOOP и заканчивается ключевыми словами END LOOP.
Любой базовый цикл должен включать в себя команду EXIT WHEN или EXIT для окончания цикла, в противном случае он будет выполняться бесконечно.
В примере использована процедура DBMS_OUTPUT.PUT для вывода информации без перехода на следующую строку.
Рассмотрим анонимный блок, иллюстрирующий использование цикла WHILE. Оператор LOOP этого цикла начинается условием, находящимся после ключевого слова WHILE, и заканчивается ключевыми словами END LOOP.
Обратите внимание на то, что определение цикла WHILE требует обязательного задания условия, определяющего, когда цикл должен закончиться.
В заключение рассмотрим анонимный блок, описывающий использование третьего типа цикла FOR. Ключевое слово LOOP цикла FOR определяет начало цикла, а ключевые слова END LOOP – его окончание.
В цикле FOR может быть объявлена своя собственная целая переменная (счетчик), являющаяся частью оператора цикла FOR ... LOOP. Ключевое слово LOOP и цикл FOR автоматически увеличивают или уменьшают значение переменной счетчика, поэтому у пользователя нет необходимости делать это в теле цикла.
Оператор IF ... ELSIF ... ELSE позволяет реализовать в программе PL/SQL условную логику. Общий синтаксис оператора имеет вид:
IF condition THEN
statement1;
statements2;
…
ELSIF condition THEN
statement3;
statement4;
…
ELSE
statement5;
statement6;
…
END;
Оператор IF выполняется следующим образом:
Вычисляется результат логического условия IF, и если он равен TRUE, то выполняются операторы блока THEN. Если результатом является значение FALSE или UNKNOWN (например, когда в условии выражение сравнивается с неинициализированной переменной), то операторы блока THEN не выполняются.
Необязательный блок ELSIF задает альтернативное условие. Если его результатом является значение TRUE, то выполняются операторы следующего блока THEN. Если условие блока ELSIF дает значение FALSE или UNKNOWN, то операторы последующего блока THEN не выполняются. Оператор IF может содержать несколько блоков ELSIF.
Необязательный блок ELSE задает последовательность операторов, которые выполняются, когда ни одно из условий предыдущих блоков IF и ELSIF не дает значение TRUE (не выполняется).
Рассмотрим следующий анонимный блок PL/SQL. В программе используется SQL-функция MOD и условия в операторе IF для определения того, является ли счетчик цикла FOR кратным 3 или 5 либо кратным и 3 и 5.