Oracle 触发器:知晓其四种类型(oracle触发器类型)
Oracle 触发器是在表上创建的,他的作用是在该表的某个操作(INSERT,UPDATE,DELETE)发生时,它会自动执行一段规定的SQL语句,从而实现某种目的,比如:改变表数据、维护并发控制等等。Oracle 触发器一共有四种类型:
* BEFORE 触发器
BEFORE触发器可以在说明的表 操作 发生之前触发,它会在执行相应的数据操作前执行,如下所示:
“`sql
CREATE OR REPLACE TRIGGER salary_before
BEFORE INSERT OR UPDATE OR DELETE ON employee
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE(‘salary of employee about to change!’);
END;
* AFTER触发器
AFTER触发器会在指定的表操作发生之后,立即触发,它会在相应的操作执行完毕之后立即执行,如下所示:
```sqlCREATE OR REPLACE TRIGGER salary_after
AFTER INSERT OR UPDATE OR DELETE ON employee FOR EACH ROW
BEGIN DBMS_OUTPUT.PUT_LINE('salary of employee has been changed!');
END;
* INSTEAD OF 触发器
INSTEAD OF触发器是用来处理视图的,用它可以在数据表更新前插入/删除/更新数据,就像是在视图上执行操作一样,如下所示:
“`sql
CREATE OR REPLACE TRIGGER salary_instead
INSTEAD OF INSERT OR UPDATE OR DELETE ON employee
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE(‘salary of employee is updating!’);
END;
* COMPOUND 触发器
COMPOUND触发器是用来把组合AFTER 和BEFORE触发器的功能,它可以把多段SQL包含在一个触发器中,比如下面的例子:
```sqlCREATE OR REPLACE TRIGGER salary_compound
INSTEAD OF UPDATE OR DELETE ON EMPLOYEE FOR EACH ROW
DECLARE BEGIN
IF UPDATING THEN DBMS_OUTPUT.PUT_LINE('salary of employee about to update!');
ELSE DBMS_OUTPUT.PUT_LINE('salary of employee about to delete!');
END IF; END;
```
通过以上四种类型可以看出,Oracle触发器在应用中有着重要作用,它可以帮助我们自动执行一段SQL语句,从而提高数据库操作的效率,比如在记录员工的工资变动之前先进行确认等等。