精通 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(数据操作语言)请求问题,也可以改善数据库逻辑实现,使用适当的触发器技术可以显著提高系统的运行效率。