Oracle数据库中的触发器类型介绍(oracle触发器类型)
Oracle数据库中触发器有6种类型,它们分别是Row level trigger、statement level trigger、before trigger、after trigger、instead of trigger、compound trigger,下面具体介绍一下每种触发器类型的特点:
1)Row Level trigger:行级触发器会在每次的操作的每一条记录上触发一次,它提供了在表内数据变更的时候最大的精细控制,通常可以应用在更新作业、流水线过程等场景。它可以针对具体某行记录进行操作,以下是Row Level trigger的表示形式:
CREATE OR REPLACE TRIGGER row_level_trigger
AFTER UPDATE OF salary ON employee
FOR EACH ROWBEGIN
INSERT INTO some_other_table(employee_id,salary) VALUES (:old.employee_id,:new.salary);
END;
2)Statement Level trigger:语句级触发器只会在执行完毕以后才会触发,它只会出发一次,也就是说它与集合操作有关,并且不能识别出更新的行,因此不能引用某行的特定的列,如果想使用Statement Level trigger,则可以使用以下代码:
CREATE OR REPLACE TRIGGER statement_level_trigger
AFTER UPDATE ON employeeBEGIN
INSERT INTO some_other_table(employee_id,salary) SELECT employee_id,salary
FROM employee;END;
3)Before Trigger:在触发器的执行早于事件操作的发生,因而可以更改触发器中变量的值,以达到控制执行事件的作用。它可以用以下代码进行实现:
CREATE OR REPLACE TRIGGER before_trigger
BEFORE INSERT ON employeeBEGIN
UPDATE employee SET salary = 1000 WHERE employee_id = :NEW.employee_id;
END;
4)After Trigger:在事件操作完成之后就可以触发,这种触发器可以完成事件后进行必要的清理工作,如释放资源等。
CREATE OR REPLACE TRIGGER after_trigger
AFTER INSERT ON employeeBEGIN
DELETE FROM employee WHERE salary = 0;End;
```
5)Instead Of Trigger:它是一种特殊的触发器,它用来替代某种类似事件的发生。一般情况下,在View视图中是无法执行Insert、Update操作的,通常使用Instead Of trigger来实现。
CREATE OR REPLACE TRIGGER instead_of_trigger
INSTEAD OF INSERT ON employee
BEGIN
INSERT INTO employee(name)
VALUES (:new.name);
END;
“`
6)Compound Trigger:当对表进行处理时,由于有多种触发事件,一般需要一次实现多个触发器,此时可以使用Compound Trigger,它可以把多个触发器的功能合并到一起,代码如下:
CREATE OR REPLACE TRIGGER compound_trigger
FOR INSERT ON employeeCOMPOUND TRIGGER
BEFORE STATEMENT IS BEGIN
INSERT INTO some_other_table(employee_id) SELECT employee_id from employee;
END BEFORE STATEMENT;
AFTER ROW IS BEGIN
UPDATE employee SET salary = 1000
WHERE employee_id = :NEW.employee_id; END AFTER ROW;
END compound_trigger;
以上是Oracle中6种触发器的特点及示例代码,它们可以根据我们的需要进行灵活使用,增加我们编程的便利性。