В начало

4. ПРОГРАММНЫЕ КОНСТРУКЦИИ PL/SQL

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

 


Рис.2 Модульность и PL/SQL

В действительности же ввод данных на экране может привести к вызову десятков отдельных процедур, каждая из которых предназначена для обработки одного маленького компонента общего процесса добавления сведений о служащем. Иногда эти компоненты являются много­кратно используемыми программными блоками ввода данных, которые берутся из различных приложений для работы с людскими ресурсами и изменяются на новом экране в соответствии с вводимыми данными. На рис. 2 показано, как модульность реализуется в блоках PL/SQL.

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

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

Именованные и анонимные блоки PL/SQL состоят из трех компонентов: раздела объявлений переменных, исполняемого раздела и обработчика исключительных ситуаций (таблица 7). В необязательном разделе объявлений описываются все конструкции переменных, которые будут использоваться в программном блоке. Переменная может иметь любой тип данных, доступный в базе данных Oracle, а также ряд других типов, при­меняемых только в PL/SQL. Исполняемый раздел блока PL/SQL обязателен и начи­нается с ключевого слова begin, заканчиваясь либо ключевым словом end для всего программного блока, либо ключевым словом exception. Последний компо­нент блока PL/SQL — это обработчик исключительных ситуаций, где описываются все ошибки, которые могут произойти в блоке, и указываются способы их обработки. В PL/SQL обработчик исключительных ситуаций необязателен.

 

Таблица 7. Компоненты блоков PL/SQL

Анонимный блок Именованный блок
DECLARE …. BEGIN ….   EXCEPTION …. END /* Начало раздела объявлений. */   /* Начало исполняемого раздела программного блока. */   /* Начало обработчика исключительных ситуаций. */   IS …. BEGIN ….   EXCEPTION …. END /* Начало раздела объявлений. */   /* Начало исполняемого раздела программного блока. */   /* Начало обработчика исключительных ситуаций. */
       

 

Блоки PL/SQL могут быть вложенными друг в друга, так что конструкция begin-exception-end может находиться внутри другого блока.

Именованные программные блоки PL/SQL подразделяются на четыре класса: хранимые процедуры, функции, модули (пакеты) и триггеры.

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

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

Модуль (или пакет) - именованный программный блок PL/SQL, состоящий из совокупности именованных процедур и функций и имеет две части Первая часть - это спецификация, или описание (specification), где перечисляются применяемые процедуры и функции, а также их параметры, константы и объявления пользовательских типов. Вторая часть — тело (body), в котором содержится реальный программный текст процедур и функций.

Триггер - именованный программный блок PL/SQL, который состоит из rpyппы операторов, связанных с таблицей базы данных. Всякий раз при возникновении активизирующего события, например UPDATE, INSERT или DELETE, срабатывает соответствующий триггер.

В ответ на активизирующее событие триггеры могут срабатывать один раз для всей таблицы или для каждой строки, которая модифицируется активизирующим событием. Можно также устанавливать триггеры для активизации только в ответ на изменение одного столбца строки.