精通Oracle触发器类型:从基础到专业(oracle触发器类型)

Oracle是世界上最流行的数据库管理系统,其中的触发器是用来促进表和数据的操作的功能性数据库对象。它实现了“操作”,这是由一组定义的条件或动作触发的信息系统行为,最常用于DML操作。触发器可以用来实现审计、维护数据完整性和实施业务规则。

Oracle支持三种类型的触发器:行触发器、状态触发器和常规触发器。

行触发器是触发影响单行的每个数据表行的操作时触发的。它们可以在表上调用插入、更新和删除操作,并在操作有效时发出信号以激发特定行为。以下是行触发器:

语法:

CREATE TRIGGER trigger_name

BEFORE INSERT OR UPDATE OR DELETE ON table_name

FOR EACH ROW

start_code_block

END;

示例:

CREATE TRIGGER trg_aud_ins

BEFORE INSERT ON tbl_test

FOR EACH ROW

BEGIN

INSERT INTO tbl_test_audit (

id,

old_value,

) VALUES (

:NEW.id,

:OLD.id

);

END;

状态触发器是在改变数据表整体状态时触发的,而不是影响特定行的操作触发的。

语法:

CREATE TRIGGER trigger_name

BEFORE INSERT OR UPDATE OR DELETE ON table_name

REFERENCING OLD AS old_value NEW AS new_value

FOR EACH STATEMENT

start_code_block

END;

示例:

CREATE TRIGGER trg_tbl_audit

BEFORE INSERT OR UPDATE OR DELETE ON tbl_test

REFERENCING OLD AS old_value NEW AS new_value

FOR EACH STATEMENT

BEGIN

INSERT INTO tbl_test_audit (

Statement,

old_value,

new_value

) VALUES (

:STATEMENT_TYPE,

:old_value.id,

:new_value.id

);

END;

最后,常规触发器是允许一个或多个“操作”触发的触发器,但只有一个触发的操作。

语法:

CREATE OR REPLACE TRIGGER trigger_name

BEFORE OR AFTER INSERT OR UPDATE OR DELETE ON table_name

[MANY OTHER OPTIONS….]

start_code_block

END;

示例:

CREATE OR REPLACE TRIGGER trg_audit

BEFORE INSERT OR UPDATE OR DELETE ON tbl_test

FOR EACH ROW

BEGIN

INSERT INTO tbl_test_audit (

Statement,

old_value,

new_value

) VALUES (

:STATEMENT_TYPE,

:old.id,

:new.id

);

END;

总之,Oracle触发器有很多用途,它们既可以保持数据完整性,也可以实现审计和业务规则。这里探讨的三种类型的触发器可以帮助你更好地理解Oracle触发器,使你能够更轻松地使用它们。


数据运维技术 » 精通Oracle触发器类型:从基础到专业(oracle触发器类型)