Конспект лекций по дисциплине «Сетевые базы данных», страница 17

Программа на языке PL/SQL состоит из блоков.  Блок PL/SQL – это люба часть кода PL/SQL, в которой имеются операторы BEGIN и END. Он может иметь или не иметь операторы DECLARE и EXCEPTION. Блоки имеют следующую структуру:

DECLARE

(список объявлений переменных)

BEGIN

(список команд SQL и PL/SQL)

EXCEPTION

(обработчики исключений)

END;

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

Вторая категория программ – это хранимые в базе данных Oracle программы PL/SQL. Хранимые программы (процедуры, функции, пакеты и триггеры) будут описаны в параграфе 9.

            5.2. Раздел DECLARE

Раздел DECLARE является необязательным разделом блока PL/SQL. Этот раздел необходим, если требуется объявить переменные или другие программные конструкции, которые будут использоваться в разделах BEGIN и/или EXCEPTION. В показанном ниже примере переменные A и B объявляются в разделе DECLARE, а затем используются в разделе BEGIN.

DECLARE

A number;

B number;

BEGIN

A := 2;

B := A * 100;

END;

5.3. Раздел BEGIN-END

Раздел BEGIN-END является обязательным разделом блока PL/SQL – именно в нем находятся исполняемые команды программы. Внутри данного раздела могут размещаться другие (внутренние) блоки PL/SQL. Глубина вложений блоков друг в друга не ограничена. В примере показан блок с вложенным в него другим блоком. Следует обратить внимание, что в каждом из блоков в разделе DECLARE объявлены переменные A и B. Однако для каждого блока это свои переменные. Во внешнем блоке переменные A и B, объявленные во внутреннем блоке, не видны. А во внутреннем блоке переменные внешнего блока видны, но в данном примере они «перекрыты» своими объявлениями переменных с такими же именами – поэтому внешние переменные тоже не видны.

DECLARE

A number;

B number;

BEGIN

A := 2;

B := A * 100;

DECLARE

A number;

B number;

BEGIN

A := 3;

B := A * 100;

dbms_output.put_line('1. B='||B);

END;

dbms_output.put_line('2. B='||B);

END;

Если выполнить эту программу то будут выведены две строки:

1. B=300

2. B=200

            5.4. Раздел EXCEPTION

Раздел EXCEPTION - необязательный раздел блока PL/SQL. Этот раздел используется для обработки ошибок, возникающих при исполнении (а не во время компиляции) программы. Если при исполнении какой-либо из команд раздела BEGIN возникает ошибка, то управление сразу же передается в раздел EXCEPTION. Обратно из раздела EXCEPTION в раздел BEGIN управление не передается.

Внутри данного раздела могут размещаться другие (внутренние) блоки PL/SQL.

В разделе EXCEPTION находятся так называемые обработчики ошибок. Количество обработчиков может быть произвольным и определяется программистом. Каждые обработчик – это отдельная программная секция, которая начинается фразой WHEN тип_ошибки THEN. В этой фразе слова WHEN и THEN – ключевые слова PL/SQL, а тип_ошибки – определяет тип обрабатываемой в данной секции ошибки. В Oracle PL/SQL ошибки могут быть предустановленного типа и ошибки, определяемые пользователем. Таким образом каждый обработчик обрабатывает ошибки только указанного типа. Есть одно исключение из этого правила, о чем будет сказано ниже.

Вслед за фразой WHEN тип_ошибки THEN размещаются любые операторы программы, которые программист сочтет необходимыми. Обычно это команды записи в журнальные таблицы для фиксации факта возникновения ошибки (тип ошибки, время ее возникновения и т.п.) или вызов процедуры, в которой выполняется дополнительная обработка.