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;

“`

因此,四种不同类型的触发器都可以实现帮助开发者完成一系列繁复而又必要的工作,从而使数据库变得更加可靠安全且便于管理。


数据运维技术 » Oracle中的触发器类型及其应用(oracle触发器类型)