?深入浅出Oracle触发器类型(oracle触发器类型)
Oracle触发器是一种数据库内部级别的操作,它可以在存储过程完成前触发自动执行指定的操作。Oracle触发器有三种类型,分别为表级触发器,行级触发器和数据库触发器。
表级触发器在表上通过触发器语句实现触发。在某一天进行插入、更新、删除操作时,它会以DML语句触发某一种操作:
1、当在表上执行INSERT操作时,将触发INSERT触发器,此时INSERT触发器里面的语句将会被执行;
2、当在表上执行UPDATE操作时,将触发UPDATE触发器,此时UPDATE触发器里面的语句将会被执行;
3、当在表上执行DELETE操作时,将触发DELETE触发器,此时DELETE触发器里面的语句将会被执行。
例如:假设在表emp上定义了INSERT触发器:
CREATE OR REPLACE TRIGGER insert_emp
AFTER INSERT ON emp
FOR EACH ROW
BEGIN
INSERT INTO log (tablename, operation, time)
VALUES (’emp’, ‘INSERT’, SYSDATE);
END;
当在表emp上执行INSERT操作时,它会触发INSERT触发器,从而在表log中插入一条记录:
表名: emp
操作: INSERT
时间: SYSDATE
行级触发器也是在表上定义的,不同的是行级触发器会在表的每一行发生插入、更新或删除操作时触发,可以实现当更新某一行数据时触发其他操作等。例如,当在表EMP上更新sal列时,可以用下面的行级触发器实现触发INSERT操作:
CREATE OR REPLACE TRIGGER update_sal
AFTER UPDATE OF SAL ON emp
FOR EACH ROW
BEGIN
INSERT INTO log (tablename, operation, time)
VALUES (’emp’, ‘UPDATE_SAL’, SYSDATE);
END;
当在表EMP上执行UPDATE操作时,它会触发UPDATE触发器,从而在表log中插入一条记录:
表名: emp
操作: UPDATE_SAL
时间: SYSDATE
最后,数据库触发器是对数据库本身发生某种操作时触发,例如当用户登陆数据库,或者在表上提交某一种操作,都会被触发。例如,当用户登录数据库时,可以用下面的数据库触发器实现触发INSERT操作:
CREATE OR REPLACE TRIGGER logon_trigger
AFTER LOGON ON DATABASE
BEGIN
INSERT INTO log (tablename, operation, time)
VALUES (‘DATABASE’, ‘LOGON’, SYSDATE);
END;
当用户登录数据库时,它会触发LOGON触发器,从而在表log中插入一条记录:
表名: Database
操作: Logon
时间: SYSDATE
综上所述,Oracle触发器有三种类型,表级触发器,行级触发器和数据库触发器,均可以满足不同的细粒度控制要求,帮助数据库更加安全和高效地运行。