了解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的几种触发器类型。它们可以帮助用户管理数据库,并防止数据库性能和数据完整性出现问题。