Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по субд Крупская.doc
Скачиваний:
57
Добавлен:
15.06.2014
Размер:
2 Мб
Скачать
☆

Вызов процедур и функций

Приложение может вызывать процедуру в анонимном блоке PL/SQL. Вызов функций может осуществляться либо в анонимном блоке посредством оператора присваивания, либо в условииWHENSQL– оператора.

Приведём примеры:

declare

cur_cust_last varchar2(100);

cur_cust_first varchar2(100);

cur_cust_addr varchar2(100);

begin

…

cur_cust_addr:= get_customer_address(cur_cust_last, cur_cust_first);

…

end/

Вызов функции в условии SQL– оператора:

delete from orders

where address= get_customer_address (‘Иванов’,’Иван’);

68 Структура и определение пакета.

ПАКЕТ - это объект базы данных, который группирует логически  связанные типы, программные объекты и подпрограммы PL/SQL.

Пакеты обычно состоят из двух частей, спецификации и тела, хотя иногда в теле нет необходимости. СПЕЦИФИКАЦИЯ пакета - это интерфейс с вашими приложениями; она объявляет типы, переменные, константы, исключения, курсоры и подпрограммы, доступные для использования в пакете.

ТЕЛО пакета полностью определяет курсоры и подпрограммы, тем самым реализуя спецификацию пакета. В отличие от подпрограмм, пакеты нельзя вызывать, передавать им параметры или вкладывать их друг в друга. В остальном формат пакета аналогичен формату подпрограммы:  PACKAGE имя IS -- спецификация (видимая часть) -- объявления общих типов и объектов -- спецификации подпрограмм END [имя];   PACKAGE BODY имя IS -- тело (скрытая часть) -- объявления личных типов и объектов -- тела подпрограмм [BEGIN -- предложения инициализации] END [имя];  

69 Триггеры бд: виды и создание

Триггербазы данных – это хранимая процедура, которую можно связать с некоторой таблицей. Когда приложение выполняет SQL – оператор DML над таблицей, удовлетворяющей условиям, указанным в триггере, ORACLEавтоматически активизируетили выполняет триггер. Таким образом, триггеры можно использовать для настройки реакции ORACLEServer на различные события приложения. Вне зависимости от типа триггера все триггеры создаются одинаково. Общий синтаксис создания, таков:

сreate [or replace] trigger имя_триггера

{before | after | instead of} активизирующее_событие

on имя_таблицы

[for each row]

тело_триггера

Здесь активизирующее_событие, указывает событие активации триггера (далее указывается конкретная таблица или представление).

Например, следующий триггер автоматически регистрирует изменения, вносимые в таблицу PARTS.

create or replace trigger parts_log

after insert or update or delete onparts

declare

stmt_type char(1);

begin

if inserting then

stmt_type:=’I’;

elsif updating then

stmt_type:=’U’;

else

stmt_type:=’D’;

end if;

insert intopart_change_log

values(stmt_type, USER);

endparts_log;

Как видно из вышеприведенного примера, описание триггера содержит однозначно определяемые части:

• список операторов, активизирующих триггер, который включает INSERT,UPDATEи/илиDELETE. Триггер может быть связан с одной и только с одной таблицей;

• триггер может быть активизирован до (before) или после (after) выполнения оператора триггера в зависимости от логики конкретного приложения.

в PL/SQLимеются следующие уникальные языковые конструкции для триггеров баз данных:

• предикаты INSERTING,UPDATING,DELETINGмогут использоваться в операторах условного перехода в теле триггера.

• значения корреляции позволяют с помощью строковых триггеров обращаться к новым и старым значениям полей текущей строки

В связи с триггерами необходимо отметить, что, начиная с восьмой версии ORACLE, появляются так называемыеINSTEADOFтриггеры, посредством которых становится возможным выполнять операции обновления над “необновляемыми представлениями”. В предыдущих версияхORACLEобновляемыми были лишь те представления, которые соответствовали основному правилу обновления представлений. В 8-й версииORACLEлюбое представление, для которого создан корректный триггерINSTEADOF – обновляемое