深入浅出 Oracle 触发器类型(oracle触发器类型)
Oracle 触发器可以实现在数据库对象发生更改时,自动执行特定的动作。触发器有几种类型:表级触发器,系统级触发器,DML触发器,DDL触发器,DCL触发器及数据库事件触发器。其中表级触发器是用最多的,因为它可以操纵表中的数据,可以让数据存的更加安全,同时也可以更容易维护表数据。
一般来说,表级触发器是在一个表上定义的,只要这个表发生某种活动(如插入一行,更新一行,删除一行,定义一行列或更改表结构),这个触发器就会被激活,然后自动执行预定义的动作,这些动作可以是更新表的数据,删除表的数据,修改表的结构,或者使用某种存储过程,DML,或DDL语句。例如,我们可以使用以下触发器来记录关于一个表中的数据的更改记录:
CREATE OR REPLACE TRIGGER trigger_name
AFTER INSERT OR UPDATE OR DELETE
ON table_name
FOR EACH ROW
BEGIN
INSERT INTO table_name_log VALUES (:new.column_name);
END;
系统级触发器是指针对数据库服务操作,如实例启动或停止,使用ALTER SYSTEM或DATABASE操作,它们也是延迟发生的,只有当某个操作完成后,它才会被触发。例如,我们可以使用下面的系统级触发器来记录与数据库服务操作相关的信息:
CREATE OR REPLACE TRIGGER trigger_name
AFTER ALTER ON DATABASE
BEGIN
INSERT INTO db_log VALUES (:new.database_name, operation_name);
END;
DML触发器是在DML(数据操纵语言)语句上定义的,它是当这些DML语句发生变动时被触发的,其中的DML语句包括INSERT,UPDATE,DELETE,MERGE及SAVEPOINT。例如,要记录在表中触发DML语句时的用户信息,我们可以使用如下DML触发器:
CREATE OR REPLACE TRIGGER trigger_name
BEFORE INSERT OR UPDATE OR DELETE
ON table_name
BEGIN
INSERT INTO audit_log VALUES (user, operation_name);
END;
DDL触发器是在DDL(数据定义语言)语句上定义的,它是当这些DDL语句执行时被触发的,包括CREATE,ALTER,DROP和TRUNCATE。例如,要在一个表或库上记录执行的DDL语句,我们可以使用如下DDL触发器:
CREATE OR REPLACE TRIGGER trigger_name
AFTER ALTER OR DROP
ON table_name
BEGIN
INSERT INTO audit_log VALUES (ddl_statement);
END;
DCL触发器是在DCL(数据控制语言)语句上定义的,它是当这些DCL语句发生变化时被触发的,比如GRANT,REVOKE等语句。例如,要在授予或撤销某种特权时记录权限信息,我们可以使用如下DCL触发器:
CREATE OR REPLACE TRIGGER trigger_name
AFTER GRANT OR REVOKE
ON table_name
BEGIN
INSERT INTO grant_revoke_log VALUES (user, grant_type);
END;
数据库事件触发器是在一个特定的系统事件上定义的,这些事件可能是服务器级别事件,数据库级别事件,表级别事件,等等。例如,要在发生内部错误时弹出警报,我们可以使用如下数据库事件触发器:
CREATE OR REPLACE TRIGGER trigger_name
AFTER Internal Error
ON database
BEGIN
RAISE_APPLICATION_ERROR ( -20000, ‘Internal Error.’ );
END;
总之,上文介绍了 Oracle 数据库中常见的几种触发器类型,并且列出