精通 Oracle 触发器:掌握四种不同类型(oracle触发器类型)

数据库管理系统中触发器是一种重要的数据库机制,在Oracle中,存在四种不同类型的触发器,分别是Before Trigger、After Trigger、Instead of Trigger和Compound Trigger,掌握下这四种触发器有助于解决DML(数据操作语言)请求问题,也能够改进数据库管理系统的逻辑实现,本文将比较详细地介绍这四种不同类型的Oracle触发器的功能和操作。

Before Trigger用法非常简单,它将在Delete、Insert和Update操作完成之前执行,当用户更新一行表记录时,Before Trigger就会自动调用,有示例代码如下:

CREATE OR REPLACE TRIGGER update_trigger_emp

BEFORE UPDATE ON emp

FOR EACH ROW

BEGIN

UPDATE emp_sal

SET emp_sal.sal = :NEW.sal

WHERE emp_sal.eno = :OLD.eno;

END;

/

After Trigger在用户的Delete、Insert和Update操作之后自动调用,它的典型用法是用于更新另一个表上的相关记录,例如:

CREATE OR REPLACE TRIGGER Update_Employee_Details

AFTER UPDATE ON EMPLOYEE

FOR EACH ROW

BEGIN

UPDATE SALARY

SET SALARY=:NEW.SALARY

WHERE USER_ID=:OLD.USER_ID;

END;

/

Instead of Trigger是用来代替Delete、Insert和Update操作的,它用于替代用户发出的DML语句,例如:

CREATE OR REPLACE TRIGGER Insert_Employee_Details

INSTEAD OF INSERT ON EMPLOYEE

FOR EACH ROW

BEGIN

INSERT INTO SALARY

(SALARY,USER_ID)

VALUES(:NEW.SALARY,:NEW.USER_ID);

END;

/

Compound Trigger是用户可以采取的最强大的触发器类型,它以若干条语句的组合替代不同类型的操作,以客户端的复杂的操作来实现,例如:

CREATE OR REPLACE TRIGGER update_sal_cust_before

COMPOUND TRIGGER

BEFORE UPDATE ON employees

FOR EACH ROW

BEGIN

— Save row’s current salary

:old.salary_total := :old.salary;

END BEFORE UPDATE ;

AFTER UPDATE ON employees

FOR EACH ROW

BEGIN

— Calculate customer’s new salary

UPDATE customers

SET customer_total_salary = customers.customer_total_salary +

:NEW.salary – :OLD.salary_total

WHERE customers.customer_no = :NEW.customer_no;

END AFTER UPDATE ;

END update_sal_cust_before;

/

以上就是四种不同类型的Oracle触发器的特性和功能。掌握四种不同的触发器能够有助于解决DML(数据操作语言)请求问题,也可以改善数据库逻辑实现,使用适当的触发器技术可以显著提高系统的运行效率。


数据运维技术 » 精通 Oracle 触发器:掌握四种不同类型(oracle触发器类型)