История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Топ:
Проблема типологии научных революций: Глобальные научные революции и типы научной рациональности...
Выпускная квалификационная работа: Основная часть ВКР, как правило, состоит из двух-трех глав, каждая из которых, в свою очередь...
Основы обеспечения единства измерений: Обеспечение единства измерений - деятельность метрологических служб, направленная на достижение...
Интересное:
Искусственное повышение поверхности территории: Варианты искусственного повышения поверхности территории необходимо выбирать на основе анализа следующих характеристик защищаемой территории...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Национальное богатство страны и его составляющие: для оценки элементов национального богатства используются...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
Синтаксис создания триггерной процедуры:
CREATE [OR REPLACE] TRIGGER имя _триггерной процедуры
{BEFORE | AFTER | INSTEAD OF} класс _события
ON
{NESTED TABLE столбец_вложенной_таблицы OF представление
| базовая_или_выводимая_ таблица
| DATABASE
| [ схема. ] SCHEMA
}
[ именующая_фраза ]
[FOR EACH ROW]
[WHEN (условие_срабатывания)]
{
[DECLARE
[PRAGMA AUTONOMOUS_TRANSACTION;]
раздел других объявлений ]
BEGIN
раздел кода
[EXCEPTION
раздел обработки исключительных ситуаций ]
END [ имя_триггерной процедуры ]
|
CALL имя_процедуры [(список_параметров)]
};
Классы событий для триггерных процедур перечислены ниже:
| Группа событий | Категория | Описание |
| INSERT | DML | Срабатывает при постановке строки в таблицу |
| UPDATE | DML | Срабатывает при модификации строки в таблице. При наличии уточнения OF (UPDATE OF список_полей) может срабатывать только при модификации определенных столбцов |
| DELETE | DML | Срабатывает при удалении строк из таблицы. Не срабатывает при TRUNCATE |
| CREATE(8.1) | DDL | Срабатывает при выполнении операции CREATE создания объектов, попадающих в перечень в ALL_OBJECTS. Может создаваться на уровне отдельной схемы или всей БД |
| ALTER(8.1) | DDL | Срабатывает при выполнении операции ALTER изменения свойств объектов, попадающих в перечень в ALL_OBJECTS. Может создаваться на уровне отдельной схемы или всей БД |
| DROP(8.1) | DDL | Срабатывает при выполнении операции DROP удаления объектов, попадающих в перечень в ALL_OBJECTS. Может создаваться на уровне отдельной схемы или всей БД |
| ANALYZE(9) ASSOCIATE STATISTICS(9) AUDIT(9) COMMENT(9) DISASSOCIATE STATISTICS(9) GRANT(9) NOAUDIT(9) RENAME(9) REVOKE(9) TRUNCATE(9) | DDL | Прочие группы DDL-событий |
| DDL(9) | DDL | Обобщенное название для всех DDL-событий |
| SERVERERROR(8.1) | База данных | Срабатывает при фиксации системой серверной ошибки. Может быть только типа AFTER |
| LOGON(8.1) | База данных | Срабатывает при возникновении нового сеанса работы пользователя (программы). Может быть только типа AFTER |
| LOGOFF(8.1) | База данных | Срабатывает при окончании работы сеанса. Может быть только типа BEFORE. Не срабатывает при разрыве сеанса. |
| STARTUP(8.1) | База данных | Срабатывает при открытии БД. Может быть только типа AFTER |
| SHUTDOWN(8.1) | База данных | Срабатывает при закрытии БД. Может быть только типа BEFORE. Не срабатывает при SHUTDOWN ABORT. |
| SUSPEND(9) | База данных | Срабатывает при приостановке транзакции вследствие нехватки доступной дисковой памяти при добавлении данных (исчерпана дисковая память, достигнут максимум числа экстентов в сегменте, исчерпана квота на табличное пространство). Если причину устранить, операцию DML можно продолжить. |
(8.1) Cуществуют, начиная с версии 8.1
(9) Cуществуют, начиная с версии 9
Типы AFTER и BEFORE.
именующая_фраза (REFERENCING) задает собственное имя для указания в теле процедуры новых и старых псевдостолбцов при выполнении операций INSERT, DELETE и UPDATE (DML-триггерные процедуры). На столбцы типа LONG и LONG RAW такое именование не распространяется. Присваивание распространяется только на индивидуальные столбцы (и не на всю запись). Для INSERT старые значения, а для DELETE новые, всегда NULL.
Указание FOR EACH ROW (DML-триггерные процедуры).
WHEN указывает на дополнительное условие, необходимое для срабатывания триггерной процедуры (DML-триггерные процедуры).
Пример создания триггерной процедуры:
CREATE OR REPLACE TRIGGER set_hiredate
BEFORE INSERT ON emp
REFERENCING NEW AS inserted_employee
FOR EACH ROW
BEGIN:inserted_employee.hiredate:= SYSDATE; END set_hiredate;
/
Примечание. Работа этой процедуры не эквивалентна следующему изменению описания таблицы EMP:
ALTER TABLE emp MODIFY (hiredate DATE DEFAULT SYSDATE);
Упражнение: проверить это.
Пример того, как можно переделать предыдущую процедуру для имитации DEFAULT SYSDATE в поле HIREDATE:
CREATE OR REPLACE TRIGGER set_hiredate
BEFORE INSERT ON emp
REFERENCING NEW AS inserted_employee
FOR EACH ROW
WHEN (inserted_employee.hiredate IS NULL)
BEGIN:inserted_employee.hiredate:= SYSDATE; END set_hiredate;
/
Фраза CALL может заменять тело триггерной процедуры в виде блока PL/SQL вызовом обычной процедуры на PL/SQL или Java, например:
CREATE TRIGGER scott.salary_check
BEFORE INSERT OR UPDATE OF sal, job ON scott.emp
FOR EACH ROW
WHEN (NEW.job <> 'PRESIDENT')
CALL check_sal (:NEW.job,:NEW.sal,:NEW.name);
|
|
|
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!