Цель работы – изучить различные виды и особенности создания тригге- ров и планировщика БД, реализовать с их помощью бизнес-логику.
Теоретические сведения
Триггерами называют процедуры, которые выполняются в ответ на проис- ходящие в базе данных события. Триггеры устанавливаются для проверки вве- денных в базу данных значений, выполнения аудита изменений, запрета вы- полнения операций.
Можно выделить следующие группы триггеров:
Триггеры DML применяются для проверки внесенных в таблицы изме- нений, которые запускаются на события: вставки, обновления, удаления дан- ных из таблиц.
Триггеры DDL запускаются при выполнении DDL-инструкций, т. е. при создании, модификации, удалении таблиц или других объектов БД.
Триггеры уровня базы данных отслеживают события, касающиеся работы самой базы данных, такие как ее останов, запуск, возникновение ошибок Oracle, а также реагируют на такие пользовательские события как logon и logoff.
Триггеры INSTEAD OF – замещающие триггеры, запускаются непо- средственно перед выполнением вставки, обновления, удаления и определяют, какие операции необходимо выполнить вместо соответствующей операции. Триггеры INSTEAD OF управляют операциями над представлениями (view), но не над таблицами и позволяют преобразовывать необновляемые представления в редактируемые, задавая их поведение в коде триггера.
Триггеры DML. Триггеры DML отслеживают события и операции, произ- водимые над данными. Это наиболее распространенный вид триггеров. DML-триггер может запускаться:
до выполнения операции – триггер BEFORE – или после выполнения опе- рации – триггер AFTER. Триггеры BEFORE используются в случае, когда надо проверить возможность выполнения операции, определить значения полей;
один раз для всей инструкции SQL – триггер уровня инструкции – или отдельно для каждой изменяемой записи – триггер уровня записи или строчный триггер (FOR EACH ROW). В этом случае, например, при обновлении 100 строк, триггер будет запускаться и срабатывать 100 раз.
Для манипулирования данными в триггере доступны так называемые псев- дозаписи NEW и OLD, которые представляют собой структуры данных, анало- гичные типу RECORD – записи PL/SQL. Псевдозапись NEW содержит значе- ния полей после внесения изменений, OLD – значения полей до внесения изме- нений. Соответственно, псевдозапись NEW доступна в триггерах, обрабатыва-
ющих операции вставки и изменения, а OLD – изменения и удаления. При обра- щении к полям псевдозаписи в теле триггера всегда записывается двоеточие –
:OLD.JOB_ID. Псевдозаписи NEW, OLD в триггере никогда не объявляются, но название псевдозаписи можно изменять при создании триггера, например:
CREATE OR REPLACE TRIGGER update_job_history BEFORE INSERT OR UPDATE
OF job_id, department_id ON employees
Достарыңызбен бөлісу: |