探索Oracle触发器的种类及使用场景(oracle触发器类型)
Oracle触发器是Oracle使用于数据库运行的强大脚本。它们能够响应所有关于特定表上DML操作指定的事件,即插入,更新或删除行。它们能够在满足条件的操作之前或之后执行动作,但仅当发生符合定义的事件时才会被触发。Oracle支持多种触发器,因此可以很好的满足不同的应用要求。
Oracle有三种不同的触发器:表触发器,行触发器和程序触发器。 每种触发器都有特定的场景,以及不同的触发之前或之后执行动作。
表触发器:当发生对表中数据发生DML操作时,此表触发器将会被触发,将满足要求的语句执行,这种表触发器使得程序简单,灵活,且编码相对较少。例如,当表Employee中新插入员工信息时,可以使用表触发器,在插入行成功之后,向日志文件中记录操作的详细信息:
CREATE OR REPLACE TRIGGER log_empl_info
AFTER INSERT ON Employee
FOR EACH ROW
BEGIN
INSERT INTO logfile VALUES (etc…);
END;
行触发器:行触发器将触发表上DML操作的每一行,进行细粒度的控制,它和表触发器的异同之处在于行触发器针对的是每一行数据而不是整个表,并且可以在触发操作之前或之后执行。例如,当表Employee有新插入行记录时,可以使用行触发器,在插入行成功之后,对信息进行审核,确认是否符合要求:
CREATE OR REPLACE TRIGGER check_empl_info
BEFORE INSERT ON Employee
FOR EACH ROW
BEGIN
IF (:new.name IS NOT NULL) THEN
RAISE_APPLICATION_ERROR(-20001, ‘Name is mandatory’);
END IF;
END;
程序触发器:程序触发器是指将触发器绑定到数据库程序的触发器。它可以用来实现复杂的应用,同时可以加快数据库响应速度。如果我们将一个程序结合表触发器来实现,就可以在一个操作中完成多步复杂操作,而无需用户自己编写代码。例如,将程序结合表触发器来实现,当有某员工信息插入时,将自动调用同一程序,该程序然后完成相关的多步复杂操作,从而加快数据库响应速度:
CREATE OR REPLACE TRIGGER call_myprog
AFTER INSERT ON Employee
BEGIN
myprog();
END;