IgorSikors.github.io

My lessons Oracle

Follow me on GitHub

Базовая структура кода

Базовый блок PL/SQL

Блоком в PL/SQL называется исполняемая программа. Блок кода PL/SQL, независимо от того, инкапсулируется он внутри какой-то программной единицы наподобие процедуры или задается в виде анонимного блока в свободной форме, состоит из следующих структур, которые представляют собой четыре ключевых оператора, только два из которых являются обязательными.

DECLARE. Этот оператор является необязательным и представляет собой то место, в котором при желании объявляются переменные и курсоры программы.

BEGIN. Этот оператор является обязательным и указывает, что далее будут идти операторы SQL и PL/SQL, т.е. обозначает начало блока кода PL/SQL.

EXCEPTION. Этот оператор является необязательным и описывает методы обработки ошибок.

END. Этот оператор является обязательными и обозначает конец блока кода PL/SQL.

Ниже приведен пример простого блока кода PL/SQL:

DECLARE isbn NUMBER(9)
BEGIN
   isbn := 123456789;
   insert into book values (isbn, 'databases', 59.99);
   COMMIT;
END;

Анонимные блоки

Анонимный блок представляет собой контейнер для хранения команд PL/SQL — обычно с вызовами процедур и функций. Поскольку анонимные блоки могут содержать собственные разделы объявлений и исключений, разработчики часто используют вложение анонимных блоков для ограничения области видимости идентификаторов и организации обработки исключений в более крупных программах.

Пример:

BEGIN
 DBMS_OUTPUT.PUT_LINE ('Hello world');
END;

Общий синтаксис анонимного блока PL/SQL:

[ DECLARE ... объявления ... ]
BEGIN ... одна или несколько исполняемых команд ...
[ EXCEPTION
 ... команды обработки исключений ... ]
END;

Квадратными скобками обозначаются необязательные составляющие синтаксиса. Анонимный блок обязательно содержит ключевые слова BEGIN и END, и между ними должна быть как минимум одна исполняемая команда.

Анонимный блок выполняет серию команд, а затем завершает свою работу, то есть по сути является аналогом процедуры. Фактически каждый анонимный блок является анонимной процедурой. Они используются в различных ситуациях, в которых код PL/ SQL выполняется либо непосредственно, либо как часть другой программы.

Именованные блоки

Хотя анонимные блоки PL/SQL применяются во многих приложениях Oracle, вероятно, большая часть написанного вами кода будет оформлена в виде именованных блоков. Их главной особенностью является наличие заголовка. Заголовок процедуры выглядит так:

PROCEDURE [схема.]имя [ ( параметр [, параметр ... ] ) ]
 [AUTHID {DEFINER | CURRENT_USER}]

Заголовок функции в целом очень похож на него, но дополнительно содержит ключевое слово RETURN:

FUNCTION [схема.]имя [ ( параметр [, параметр ... ] ) ]
 RETURN возвращаемый_тип
 [AUTHID {DEFINER | CURRENT_USER}]
 [DETERMINISTIC]
 [PARALLEL ENABLE ...]
 [PIPELINED [USING...] | AGGREGATE USING...]

Вложенные блоки

PL/SQL, как и языки Ada и Pascal, относится к категории языков с блочной структурой, то есть блоки PL/SQL могут вкладываться в другие блоки. С другой стороны, язык C тоже поддерживает блоки, но стандартный C не является строго блочно-структурированным языком, потому что вложение подпрограмм в нем не допускается.

В следующем примере PL/SQL показана процедура, содержащая анонимный вложенный блок:

PROCEDURE calc_totals
IS
 year_total NUMBER;
BEGIN
 year_total := 0;
 /* Начало вложенного блока */
 DECLARE
 month_total NUMBER;
 BEGIN
 month_total := year_total / 12;
 END set_month_total;
 /* Конец вложенного блока */
END;

Ограничители /* и */ обозначают начало и конец комментариев (см. раздел «Комментарии» далее в этой главе). Анонимные блоки также могут вкладываться более чем на один уровень:

DECLARE
 CURSOR emp_cur IS ...;
BEGIN
 DECLARE
 total_sales NUMBER;
 BEGIN
 DECLARE
 l_hiredate DATE;
 BEGIN
 ...
 END;
 END;

Вопросы для самопроверки

  1. Что такое блоком в PL/SQL?
  2. Из каких структур состоит блок PL/SQL?
  3. Какая главная особенность именованного блока?
  4. Присутствую ли в PL/SQL вложенные блоки?
  5. Какая стуркутра блока позволяет обрабатывать ошибки?

Упражнения

  1. Напишите пример простого блока кода PL/SQL
  2. Напишите пример именованного блока кода PL/SQL
  3. Напишиет простую процедуру суммирования,содержащую анонимный вложенный блок

Предыдущий урок Следующий урок