深入浅出 Oracle 触发器类型指南(oracle触发器类型)
Oracle触发器是用来在特定的事件发生时自动完成操作的,是Oracle数据库的重要部分。Oracle 支持四种触发器类型,正确选择哪种触发器将有助于应用程序的效能和可靠性,下面就深入浅出 Oracle 触发器类型给出一些简明介绍。
1. Statement 触发器:这类触发器与表的一个操作有关,比如insert,update,delete等,其行为可用一个 sql语句来描述。当在表上进行INSERT,UPDATE,DELETE操作时,触发器就定义的sql语句将被执行(成功完成当前操作后)。
例如:
CREATE OR REPLACE TRIGGER remove_rows
BEFORE DELETEON test
FOR EACH ROW BEGIN
IF : OLD.A 2 THEN
RAISE_APPLICATION_ERROR(-20001, '记录不能被删除');
END IF;END;
/
2. Row 触发器:Row触发器和Statement触发器类似,它们也是在DML操作中触发,但他们能拿到行数据,并根据行数据来处理;row触发器只有一次可以运行。
例如:
CREATE OR REPLACE TRIGGER remove_rows
BEFORE DELETE ON test
REFERENCING OLD AS OLDFOR EACH ROW
BEGIN IF : OLD.A 2
THEN RAISE_APPLICATION_ERROR(-20001,
'记录不能被删除'); END IF;
END;/
3. Connection 触发器:这种触发器可以把操作定义在一个数据库连接上,此触发器只在数据库连接开启和关闭时被触发,绝不会影响当前会话,只影响将要执行的会话。
例如:
CREATE OR REPLACE TRIGGER DB_LOGON
AFTER LOGON ON DATABASEBEGIN
dbms_output.enable( ); dbms_output.put_line( '用户登录时间 – ' || sysdate );
END;/
4. System 触发器:这种触发器可以定义在数据库级别的,同时也可以定义在模式级别上,它触发的时机是当触发器所定义的事件发生时。
例如:
CREATE OR REPLACE TRIGGER startup_trigger
AFTER STARTUP ON SCHEMADECLARE
s VARCHAR2(256);BEGIN
SELECT '数据库开启成功' INTO s FROM DUAL; dbms_output.put_line(s);
END;/
综上所述,Oracle提供了四种触发器类型,分别是:Statement触发器、Row触发器、Connection触发器和System触发器,在数据库应用设计中,他们具有不可替代的作用。若正确使用,将大大提高数据库的数据操作效能和提高程序的可靠性。