Oracle触发器的种类与用途(oracle触发器类型)

Oracle的触发器是表的特殊存储过程,用于执行执行在特定事件时自动运行的动作。它们可以用来触发代码,实现自动事务处理,保护表,对表数据进行即时更新,等等。

根据在Oracle表上执行的操作,Oracle触发器有四种类型:

1.行级触发器:此类触发器每次应用于特定行的操作,例如更新行中的特定列。如:

CREATE TRIGGER trg_empsal_update
BEFORE UPDATE OF sal
ON Emp
FOR EACH ROW
BEGIN
-- Execute the following block for each row that is updated
IF :new.sal
raise_application_error(-20000,'Cannot decrease salary');
END IF;
END;
/

2.表级触发器:该类触发器每次应用于特定表的操作,例如插入、更新和删除操作。如:

CREATE TRIGGER trg_emp_before_insert
BEFORE INSERT
ON Emp
FOR EACH ROW
BEGIN
-- Execute the following block before each row is inserted
IF (to_date(:new.hiredate,'dd/mm/yyyy') > sysdate) THEN
raise_application_error(-20001,'Incorrect hire date');
END IF;
END;
/

3.语句触发器:该类触发器每次应用于特定指令的操作,例如更新、插入和删除操作。如:

CREATE TRIGGER trg_emp_before_delete
BEFORE DELETE
ON Emp
BEGIN
-- Execute the following block before the DELETE statement is executed
RAISE_APPLICATION_ERROR(-20002,'Deletion not allowed');
END;
/

4.之后触发器:该类触发器应用于一个指令执行完成后的操作,例如更新、插入和删除操作。如:

CREATE TRIGGER trg_emp_after_delete
AFTER DELETE
ON Emp
BEGIN
-- Execute the following block after the DELETE statement is executed
INSERT INTO Emp_audit VALUES(:old.empid,:old.ename,:old.sal,sysdate,'Deleted');
END;
/

因此,我们可以利用上述各种触发器类型,在表的操作中运行自动代码来解决特定问题。比如,可以用语句触发器自动更新表中的视图,或者使用行级触发器在每行更新或插入之前进行数据检查。

由于触发器可以实现自动数据处理和复杂逻辑控制,因此它们可以大大简化数据库管理和数据处理的程序。因此,在系统设计中,应该合理考虑Oracle触发器的使用,以优化代码逻辑和最大程度地特取实用性和功能性。


数据运维技术 » Oracle触发器的种类与用途(oracle触发器类型)