Триггеры PL/SQL — это мощные объекты базы данных, которые позволяют разработчикам автоматизировать действия в ответ на определенные события, происходящие в базе данных Oracle. Триггеры можно использовать для обеспечения целостности данных, выполнения проверок, обновления связанных таблиц или запуска сложной бизнес-логики. В этой статье мы рассмотрим различные методы реализации триггеров PL/SQL, сопровождаемые примерами кода, демонстрирующими их использование.
- Синтаксис триггера PL/SQL:
Триггер PL/SQL определяется с использованием следующего синтаксиса:
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER | INSTEAD OF} {event(s)}
ON table_name
[FOR EACH ROW]
[WHEN (condition)]
DECLARE
-- Variables and declarations
BEGIN
-- Trigger logic and actions
EXCEPTION
-- Exception handling
END;
/
-
Типы триггеров.
Существует три основных типа триггеров в зависимости от времени их выполнения:- BEFORE Triggers: выполняется до того, как произойдет событие-триггер.
- Триггеры AFTER: выполняются после возникновения триггерного события.
- ВМЕСТО триггеров: выполняется вместо триггерного события.
-
Создание простого триггера.
Давайте создадим простой триггер, который автоматически обновляет столбец «last_modified» при каждом обновлении строки в таблице «сотрудники»:
CREATE OR REPLACE TRIGGER update_last_modified
BEFORE UPDATE ON employees
FOR EACH ROW
BEGIN
:NEW.last_modified := SYSDATE;
END;
/
- Составной триггер.
Составной триггер – это особый тип триггера, который объединяет все точки времени (ДО, ПОСЛЕ и ВМЕСТО) в одно тело триггера. Это позволяет выполнять действия на разных стадиях триггерного события. Вот пример:
CREATE OR REPLACE TRIGGER compound_trigger_demo
FOR employees
COMPOUND TRIGGER
-- Declaration section
-- Variables, cursors, etc.
BEFORE EACH ROW IS
BEGIN
-- Trigger logic before row operation
END BEFORE EACH ROW;
AFTER EACH ROW IS
BEGIN
-- Trigger logic after row operation
END AFTER EACH ROW;
AFTER STATEMENT IS
BEGIN
-- Trigger logic after statement execution
END AFTER STATEMENT;
END compound_trigger_demo;
/
- Обеспечение целостности данных.
Триггеры можно использовать для обеспечения соблюдения сложных бизнес-правил и ограничений целостности данных. Вот пример триггера, который ограничивает удаление отдела, если в нем есть активные сотрудники:
CREATE OR REPLACE TRIGGER prevent_dept_deletion
BEFORE DELETE ON departments
FOR EACH ROW
DECLARE
emp_count NUMBER;
BEGIN
SELECT COUNT(*) INTO emp_count
FROM employees
WHERE department_id = :OLD.department_id;
IF emp_count > 0 THEN
RAISE_APPLICATION_ERROR(-20001, 'Cannot delete department with active employees.');
END IF;
END;
/
Триггеры PL/SQL — это универсальный инструмент для автоматизации действий в базе данных Oracle. Они предоставляют механизм реагирования на определенные события и выполнения пользовательской логики. В этой статье мы рассмотрели синтаксис, типы и примеры реализации триггеров PL/SQL. Используя возможности триггеров, разработчики могут повысить целостность данных, обеспечить соблюдение бизнес-правил и оптимизировать сложные операции с базами данных.