Базовой единицей любой программы, написанной на PL/SQL, является блок. Из блоков состоят все программы PL/SQL, причем блоки могут
идти один за другим (последовательно) либо вкладываться один в другой.
Существуют два различных типа блоков: анонимные блоки и именованные. Анонимные блоки обычно создаются динамически и выполняются только один раз. Этот тип блоков, как правило, создается в клиентской программе для вызова подпрограммы, хранящейся в базе данных. Именованные блоки отличаются тем, что они имеют имя. Именованные блоки
могут быть разбиты на категории следующим образом:
Помеченные блоки (labeled block) являются анонимными блоками с меткой, которая дает блоку имя. Они создаются обычно динамически и выполняются только один раз. Помеченные блоки используются так же, как и анонимные блоки, но метка позволяет ссылаться на переменные, которые иначе были бы недоступны.
Подпрограммы (subprogram) делятся на процедуры и функции. Они могут храниться в базе данных как автономные объекты, как часть модуля или как методы объектного типа. Подпрограммы обычно не
изменяются после своего создания и выполняются неоднократно. Подпрограммы могут объявляться в других блоках. Независимо от того, где они объявлены, подпрограммы выполняются явно посредством вызова процедуры или функции.
• Триггеры (triggers) — это именованные блоки, которые ассоциируются с некоторым событием, происходящим в базе данных. Они, как правило, не изменяются после своего создания и выполняются многократно неявным образом при наступлении соответствующих событий. Событием, активизирующим триггер, может быть выполнение оператора языка манипулирования данными (DML, data manipulation language) над некоторой таблицей базы данных. К операторам DML относятся INSERT (ввести), UPDATE (обновить) и DELETE (удалить). Это может также быть оператор языка определения данных (DDL, data definition language), такой как CREATE или DROP, или событие базы данных, например запуск или останов.
Ниже приводится анонимный блок PL/SQL, с помощью которого в
таблицу temp_table вводятся две строки, затем они выбираются и отображаются на экране. Пример представлен в виде сеанса SQL*Plus:


внимание

Для выполнения приведенного выше примера, как и большинства других примеров этой книги, необходимо создать несколько таблиц, в том числе таблицу temp_table. Это можно сделать при помощи сценария tables, sql. Имена нужных файлов указываются в начале каждого примера, их также можно найти в файле README. Модуль DBMS_OUTPUT описан в главе 2.

Можно превратить этот блок в хранимую процедуру, если заменить ключевое слово DECLARE ключевыми словами CREATE OR REPLACE PROCEDURE (см. главы 9 и 10). Обратите внимание, что имя процедуры указывается после ключевого слова END.

После создания процедуры можно вызывать ее с помощью анонимного блока следующим образом:
I

Более подробно о создании и вызове хранимых подпрограмм рассказывается в главах 9 и 10.
В заключение создадим для таблицы temp..table триггер, чтобы гарантировать ввод в столбец num_col только положительных значений. (Более подробно триггеры обсуждаются в главе 11.) Этот триггер будет вызываться всякий раз, когда в таблицу temp_table вводится новая строка или обновляется существующая.

Этот триггер будет срабатывать всякий раз, когда вызывается INSERT или UPDATE для таблицы te mp tab 1е. Следующий сеанс SQL*PlusnoKa3bi-вает несколько успешных и неуспешных операций:

| < Предыдущая | Следующая > |
|---|


