深入浅出 Oracle 触发器类型指南(oracle触发器类型)

Oracle触发器是用来在特定的事件发生时自动完成操作的,是Oracle数据库的重要部分。Oracle 支持四种触发器类型,正确选择哪种触发器将有助于应用程序的效能和可靠性,下面就深入浅出 Oracle 触发器类型给出一些简明介绍。

1. Statement 触发器:这类触发器与表的一个操作有关,比如insert,update,delete等,其行为可用一个 sql语句来描述。当在表上进行INSERT,UPDATE,DELETE操作时,触发器就定义的sql语句将被执行(成功完成当前操作后)。

例如:

CREATE OR REPLACE TRIGGER remove_rows 
BEFORE DELETE
ON 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 OLD
FOR 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 DATABASE
BEGIN
dbms_output.enable( );
dbms_output.put_line( '用户登录时间 – ' || sysdate );
END;
/

4. System 触发器:这种触发器可以定义在数据库级别的,同时也可以定义在模式级别上,它触发的时机是当触发器所定义的事件发生时。

例如:

CREATE OR REPLACE TRIGGER startup_trigger
AFTER STARTUP ON SCHEMA
DECLARE
s VARCHAR2(256);
BEGIN
SELECT '数据库开启成功' INTO s FROM DUAL;
dbms_output.put_line(s);
END;
/

综上所述,Oracle提供了四种触发器类型,分别是:Statement触发器、Row触发器、Connection触发器和System触发器,在数据库应用设计中,他们具有不可替代的作用。若正确使用,将大大提高数据库的数据操作效能和提高程序的可靠性。


数据运维技术 » 深入浅出 Oracle 触发器类型指南(oracle触发器类型)