深入解析Oracle触发器类型(oracle触发器类型)

Oracle触发器是指特定的数据库操作被激发时要执行的代码,可以用来监控数据库表中的更改,直接更改数据,还可以在指定时间自动执行复杂的任务和后台作业。Oracle数据库支持四种触发器:INSERT,UPDATE,DELETE和TRUNCATE以及CALL语句触发器。

INSERT触发器指的是当对数据库表执行insert操作时,发生的触发器。通常,在插入新行之前或之后执行后台任务,例如新建或更新关联表,或检查事务是否具有效性。例如,以下INSERT触发器定义在插入新行之前检查名称是否已存在:

“` SQL

CREATE OR REPLACE TRIGGER check_name

BEFORE INSERT ON you_tab

FOR EACH ROW

BEGIN

IF EXISTS (SELECT name from your_tab WHERE name =:NEW.name)

THEN

raise_application_error(-20004,’name has exist’);

END IF;

END;


UPDATE触发器指的是当对数据库表执行update操作时,发生的触发器。此类触发器可以检查并允许或拒绝更新,或在更新表行时完成后台任务。例如,以下UPDATE触发器定义两个更新后列值之间相互比较:

``` SQL
CREATE OR REPLACE TRIGGER check_compare
AFTER UPDATE ON Your_tab
FOR EACH ROW
BEGIN
IF :OLD.commparison_col
THEN
raise_application_error(-20102, 'Cannot increase the value');
END IF;
END;

DELETE触发器指的是当对数据库表执行delete操作时,发生的触发器。常用于删除表行前完成后台任务,如同时删除关联表中的行。例如,以下DELETE触发器定义删除行前检查,防止误删除:

“` SQL

CREATE OR REPLACE TRIGGER check_del

BEFORE DELETE ON your_tab

FOR EACH ROW

BEGIN

IF :OLD.colx = ” THEN

DBMS_OUTPUT.PUT_LINE(‘This row may not be deleted’);

RAISE_APPLICATION_ERROR(-20001,’This row may not be deleted’);

END IF;

END;


TRUNCATE触发器指的是当对数据库表执行truncate操作时,发生的触发器。此类触发器常用于定义在清空表前做何事。例如,以下TRUNCATE触发器定义在清空表前备份表中的数据:

``` SQL
CREATE OR REPLACE TRIGGER trun_backup
BEFORE TRUNCATE ON your_tab
BEGIN
EXECUTE IMMEDIATE 'COPY TABLE your_tab TO backup_dir/your_tab';
END;

CALL语句触发器指的是当对数据库表执行CALL操作时,发生的触发器。此类触发器用于定义在某个存储过程或函数被调用时要执行的代码,如检查参数是否具有效性,处理传入α参数,生成日志等。例如,以下CALL语句触发器定义在调用特定存储过程前检查参数:

“` SQL

Create or Replace TRIGGER check_parameter

BEFORE CALL ON your_pkg

BEGIN

IF :NEW.param1 IS NULL THEN

dbms_output.put_line(‘param1 cannot be null’);

RAISE_APPLICATION_ERROR(-20001,’param1 cannot be null’);

END IF;

END;


总之,Oracle触发器类型保证了数据库可以在命令之前、之后或同时运行,可以监控各种更改、自动执行后台作业,并防止了非法更改及其他的数据库安全漏洞。

数据运维技术 » 深入解析Oracle触发器类型(oracle触发器类型)