深入了解Oracle触发器之类型篇(oracle触发器类型)
Oracle触发器是由用户定义的程序模块,可以伴随特定的数据库事件被自动执行。它的执行是发生指定的SQL或PL/SQL代码,以响应数据库事件,从而完成任务。
Oracle触发器可以分为三类:Row Level Trigger,Statement Level Trigger 和 System Level Trigger。
Row Level Trigger是最常用的Oracle触发器,它在特定表上由数据库变更事件,如INSERT,UPDATE 或DELETE操作触发。当此类操作执行时,触发器将在行级别上执行。
例如,下面的代码是一个行级别的触发器,它可以捕捉Employees表中新插入的行:
CREATE OR REPLACE TRIGGER trg_employee_insert
AFTER INSERT ON employeesFOR EACH ROW
BEGIN INSERT INTO employees_log
(id, name, salary) VALUES
(:new.id, :new.name, :new.salary);END;
Statement Level Trigger也被称为Statement Trigger或Schema Level Trigger,它发生在整个语句级别执行之前或之后. 一次数据库操作可能涉及多个行,或者甚至不涉及任何行,因此在Statement Level Trigger中不会存在行级别变量。
例如,下面的触发器可以检测Employees表上的任何更新:
CREATE OR REPLACE TRIGGER trg_employee_update
BEFORE UPDATE ON employeesBEGIN
INSERT INTO employees_log (table_name, old_salary, new_salary, modified_by)
VALUES ( 'Employees',
:old.salary, :new.salary,
USER);END;
System Level Trigger是一种特殊类型的表级触发器,它可以在数据库级别、实例级别或用户级别触发,使用在Oracle数据库的前台环境中。它可以用于发生特殊的事件,比如当服务启动时,当用户登录时,或是当另一个会话终止时,System Level Trigger会立即被触发。
例如,下面的触发器可以在服务启动时执行:
CREATE OR REPLACE TRIGGER trg_sys_start
AFTER STARTUP ON DATABASEBEGIN
INSERT INTO log (event_name, event_date)
VALUES ( 'SERVER STARTUP', SYSDATE );
END;
总之,Oracle触发器是一种非常有用的功能,因为它可以极大地提高程序的效率和减少重复劳动。它可以根据类型的不同,在不同层级执行(Row Level、Statement Level 或 System Level),执行SQL或 PL/SQL代码,或帮助用户完成任务和任务自动化。