了解Oracle触发器类型,轻松管理数据库(oracle触发器类型)

Oracle的触发器是子程序,用于在特定的数据库表事件发生时触发一个“事件响应”,以维持数据库的正确性。Oracle触发器的类型包括行触发器、给定的表触发器、在特定时间点触发的软件触发器(空参与带参)以及独立的触发器。

行触发器当发生INSERT,UPDATE或DELETE操作时,会触发。行触发器可以对每行数据产生一个响应,可以通过它完成对应用程序运行时出现的变化的响应,而且每行都有不同的响应。它使得你能够以前所未有的方式个性化应用性能管理。这种触发器主要适用于在当前表中更新其它行的场景,而这种操作只在行级范围开发时才有必要。下面是一个使用行触发器的简单例子:下面代码创建了一个行触发器,当在表EMPLOYEE中插入新行时,将会在表EMPLOYEE_AUDIT中插入一条相同的记录,用以跟踪变更行。

CREATE OR REPLACE TRIGGER insert_row

BEFORE INSERT

ON employee

FOR EACH ROW

BEGIN

INSERT INTO employee_audit VALUES (:NEW.employee_id, … );

END;

给定表的触发器是一种特殊的表触发器,只能用于更新操作,而不能涉及行操作。它查看变更表的完整内容,这与行触发器不同,即它看到的是表的当前状态,而不是变更状态。它可以用来检查表中是否存在重复或者未在表中出现的记录。下面是一个使用给定表触发器的例子:

CREATE OR REPLACE TRIGGER validate_department

BEFORE UPDATE OR DELETE

ON employee

FOR EACH ROW

BEGIN

IF NOT EXISTS (

SELECT *

FROM department

WHERE department_id = :NEW.department_id

) THEN

RAISE_APPLICATION_ERROR(

-20001,

‘Department ID does not exist: ‘ || :NEW.department_id

);

END IF;

END;

在特定时间点触发的软件触发器可以代替原来的SCHEDULER作业,它可以执行给定任务的时间间隔,以及执行操作,而无需再使用外部应用程序,如Linux的crontab。在特定时间点触发的软件触发器可以有空参和带参2种, 其中带参触发器允许传入参数。

CREATE OR REPLACE TRIGGER job_timer

AFTER SCHEDULE ‘every 5 minutes’

ON DATABASE

BEGIN

— Do something every 5 minutes

END;

CREATE OR REPLACE TRIGGER job_passing_params

AFTER SCHEDULE ‘every 5 minutes’

ON DATABASE

WITH PARAMETER (interval VARCHAR2)

BEGIN

— Do something every 5 minutes depending on parameter

END;

最后,独立触发器不是绑定到特定表或列上的,而是独立运行的。它也可以在相应的操作(如SELECT, INSERT, UPDATE等)完成后触发,也可以在特定的时间间隔后被触发。它是一种非常强大的功能,它可以用来记录表更改,定期巡检表内容等。

以上就是Oracle的几种触发器类型。它们可以帮助用户管理数据库,并防止数据库性能和数据完整性出现问题。


数据运维技术 » 了解Oracle触发器类型,轻松管理数据库(oracle触发器类型)