Oracle中的触发器类型及其应用(oracle触发器类型)
Oracle中包含了四种不同类型的触发器,这些触发器可以帮助开发者完成一系列繁复的工作,比如收集数据、记录日志、进行审核检查和根据表的变更自动更新另一个表等等,其中有四类触发器的定义:
一类是行级触发器(Row-Level Trigger):在每次执行INSERT、UPDATE或DELETE语句时都会被触发,它们可以处理列级验证、数据级完整性,从而保证数据库中数据的准确性。例如,行级触发器可以实现下面的要求:
“`
CREATE OR REPLACE TRIGGER check_name
BEFORE INSERT OR UPDATE OF name
ON student
FOR EACH ROW
BEGIN
IF (:new.name IS NULL) THEN
RAISE_APPLICATION_ERROR(-20000, ‘Name column required.’)
END IF;
END;
“`
二类为表级触发器(Statement-Level Trigger):该类型的触发器对每个SQL语句只被触发一次,它们可以实现诸如统计表操作次数、记录表数据变化历史等功能。例如,表级触发器可以实现下面的要求:
“`
CREATE OR REPLACE TRIGGER update_student_stats
AFTER INSERT OR UPDATE OR DELETE ON student
BEGIN
UPDATE stats SET updated_at = SYSDATE;
INSERT INTO stats_table VALUES (‘student_table’,
SYSDATE, ‘inserted/updated/deleted’);
END;
“`
三类是系统触发器(System Trigger):这些触发器会在一些特定的系统变量被操作时被触发,它们可以用来实现一些特殊的审计功能。例如,系统触发器可以实现下面的要求:
“`
CREATE OR REPLACE TRIGGER system_logon
AFTER LOGON ON DATABASE
DECLARE
user_name VARCHAR(15);
BEGIN
SELECT USER INTO user_name FROM DUAL;
INSERT INTO log_table (user_name, action)
VALUES (user_name, ‘logged_on’);
END;
“`
最后是一类获取触发器(DDL Trigger):它们在创建、修改、删除对象或者执行一些更改数据库行为的操作时被触发,可以用来实现一些审计和安全校验的功能;例如,获取触发器可以实现下面的要求:
“`
CREATE OR REPLACE TRIGGER ddl_trigger
AFTER CREATE OR ALTER ON DATABASE
BEGIN
INSERT INTO log_table (user_name, action, object_name)
VALUES (USER, ‘created/altered’, ‘object_name’);
END;
“`
因此,四种不同类型的触发器都可以实现帮助开发者完成一系列繁复而又必要的工作,从而使数据库变得更加可靠安全且便于管理。