精通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触发器,使你能够更轻松地使用它们。