深入解析Oracle触发器的类型(oracle触发器类型)

Oracle触发器是一种特殊的数据库对象,当数据库表中的数据发生变化时,它会自动执行指定的任务,用于实现记录新添加、删除、更新以及其他数据库表操作,以及执行相应操作前或者操作后的其他任务。支持触发器的Oracle代表有Oracle7,Oracle8,Oracle9i及以后的版本。

Oracle触发器可分为表触发器和存储过程触发器。表触发器是实际上的触发器,存储过程触发器则是进入存储过程后内部定义的触发器。

表触发器包括:

(1) BEFORE INSERT触发器:在插入新行之前触发。

例如:

CREATE OR REPLACE TRIGGER Trig_DEMO_Insert
BEFORE INSERT ON DEMO
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE('Before Insert at '||sysdate);
END;

(2)AFTER INSERT触发器:在插入新行之后触发。

例如:

CREATE OR REPLACE TRIGGER Trig_DEMO_Insert_Post
AFTER INSERT ON DEMO
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE('After Insert at '||sysdate);
END;
```
(3) BEFORE DELETE触发器:在删除行之前触发。

例如:

CREATE OR REPLACE TRIGGER Trig_DEMO_Delete

BEFORE DELETE ON DEMO

FOR EACH ROW

BEGIN

DBMS_OUTPUT.PUT_LINE(‘Before Delete at ‘||sysdate);

END;


(4) AFTER DELETE触发器:在删除行之后触发。

例如:

CREATE OR REPLACE TRIGGER Trig_DEMO_Delete_Post

AFTER DELETE ON DEMO

FOR EACH ROW

BEGIN

DBMS_OUTPUT.PUT_LINE(‘After Delete at ‘||sysdate);

END;


(5) BEFORE UPDATE 触发器:在更新行之前触发。

例如:

CREATE OR REPLACE TRIGGER Trig_DEMO_Update

BEFORE UPDATE ON DEMO

FOR EACH ROW

BEGIN

DBMS_OUTPUT.PUT_LINE(‘Before Update at ‘||sysdate);

END;


(6) AFTER UPDATE触发器:在更新行之后触发。

例如:

CREATE OR REPLACE TRIGGER Trig_DEMO_Update_Post

AFTER UPDATE ON DEMO

FOR EACH ROW

BEGIN

DBMS_OUTPUT.PUT_LINE(‘After Update at ‘||sysdate);

END;


存储过程触发器则是存储过程的内部触发器,它的主要包括:

(1) BEFORE Statement触发器:在存储过程执行前触发。

例如:

CREATE OR REPLACE TRIGGER Trig_DEMO_BeforeStmt

BEFORE INSERT ON DEMO

REFERENCING OLD AS OLDNEW AS NEW

FOR EACH ROW

BEGIN

DBMS_OUTPUT.PUT_LINE(‘Before Statement at ‘||sysdate);

END;


(2)AFTER Statement触发器:在存储过程执行完毕后触发。

例如:

CREATE OR REPLACE TRIGGER Trig_DEMO_AfterStmt

AFTER INSERT ON DEMO

REFERENCING OLD AS OLDNEW AS NEW

FOR EACH ROW

BEGIN

DBMS_OUTPUT.PUT_LINE(‘After Statement at ‘||sysdate);

END;


以上就是Oracle触发器的基本内容,具体应用要视具体情况而定。Oracle触发器的明确使用可以提高程序的效率,大大降低数据库操作的复杂性,也有利于数据库的安全性。

数据运维技术 » 深入解析Oracle触发器的类型(oracle触发器类型)