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 ROW
BEGIN
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 employee
BEGIN
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 employee
BEGIN
UPDATE employee SET salary = 1000
WHERE employee_id = :NEW.employee_id;
END;

4)After Trigger:在事件操作完成之后就可以触发,这种触发器可以完成事件后进行必要的清理工作,如释放资源等。

CREATE OR REPLACE TRIGGER after_trigger
AFTER INSERT ON employee
BEGIN
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 employee
COMPOUND 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种触发器的特点及示例代码,它们可以根据我们的需要进行灵活使用,增加我们编程的便利性。


数据运维技术 » Oracle数据库中的触发器类型介绍(oracle触发器类型)