熟悉Oracle触发器的有效类型(oracle触发器类型)
Oracle触发器是一种存储在数据库中的结构化查询语言(SQL)代码,它可以响应某些表或视图、用户定义函数(UDF)、存储过程及存储函数在普通数据库操作期间发生的某种类型的有效类型事件,并以此事件发生时立即在数据库服务器上执行一系列动作。在Oracle中,触发器通常用于自动执行在标准数据库操作(增加、修改或删除)之后所触发的动作任务。 Oracle触发器的有效类型包括表级触发器、行级触发器、数据库级触发器和系统级触发器。
* 表级触发器:表级触发器是指基于某一表的操作而触发的触发器,它是数据库触发器最常用的类型,其中最常用的是“before update”和“after update”触发器。下面是一个例子,假设用户想要在更新表CUSTOMERS行时对旧的销售金额与新的销售金额进行比较:
CREATE OR REPLACE TRIGGER log_amount_change
BEFORE UPDATE OF sale_amount ON CUSTOMERS
FOR EACH ROW
BEGIN
IF :old.sale_amount :new.sale_amount THEN
INSERT INTO sale_audit_logs
VALUES (USER,SYSDATE, :old.sale_amount, :new.sale_amount);
END IF;
END;
* 行级触发器:行级触发器是基于某一表某一行的操作而触发的触发器,用户可以使用它来验证指定表中每一行的某些行中所填写的值是否有效或符合规则。如下所示,在用户更新CUSTOMERS表中行时,将比较修改前和修改后的销售金额:
CREATE OR REPLACE TRIGGER log_amount_change
BEFORE UPDATE OF sale_amount ON CUSTOMERS
FOR EACH ROW
BEGIN
IF :old.sale_amount :new.sale_amount THEN
INSERT INTO sale_audit_logs
VALUES (USER, SYSDATE, :old.sale_amount, :new.sale_amount);
END IF;
END;
* 数据库级触发器:数据库级触发器是一种被用来在某一数据库操作时触发的触发器,它可以被用来在用户连接、断开数据库、改变数据库或引发数据库访问的情况下发生的操作。如下所示,当用户连接到数据库时将自动运行一个操作:
CREATE OR REPLACE TRIGGER log_user_login
ON DATABASE
BEGIN
INSERT INTO user_login_logs
VALUES (USER,SYSDATE);
END;
* 系统级触发器:系统级触发器是基于Oracle操作系统上发生某些事件而自动触发的触发器,有时也叫做外部触发器或网络触发器,用户可以用它来检测系统变化。根据系统变更的不同类型,它可以响应文件、进程、网络等事件。如下所示,会在指定文件发生变化时触发一个操作:
CREATE OR REPLACE TRIGGER file_modification
ON FILE /opt/my_data/my_file
BEGIN
INSERT INTO file_modify_logs
VALUES (USER, SYSDATE);
END;
以上就是Oracle触发器的四种有效类型:表级触发器、行级触发器、数据库级触发器和系统级触发器。Oracle触发器有一些限制,用户必须在使用Oracle触发器时遵守以下规则:在触发器中可以使用的SQL语句不应与触发的操作有冲突(更新或删除),也不应该发生嵌套更新等操作;用户应尽量避免在触发器中进行耗时操作。因此,有必要了解Oracle触发器的有效类型