Oracle触发器的种类与用途(oracle触发器类型)
Oracle的触发器是表的特殊存储过程,用于执行执行在特定事件时自动运行的动作。它们可以用来触发代码,实现自动事务处理,保护表,对表数据进行即时更新,等等。
根据在Oracle表上执行的操作,Oracle触发器有四种类型:
1.行级触发器:此类触发器每次应用于特定行的操作,例如更新行中的特定列。如:
CREATE TRIGGER trg_empsal_update
BEFORE UPDATE OF salON Emp
FOR EACH ROWBEGIN
-- Execute the following block for each row that is updatedIF :new.sal
raise_application_error(-20000,'Cannot decrease salary');END IF;
END;/
2.表级触发器:该类触发器每次应用于特定表的操作,例如插入、更新和删除操作。如:
CREATE TRIGGER trg_emp_before_insert
BEFORE INSERTON Emp
FOR EACH ROWBEGIN
-- Execute the following block before each row is insertedIF (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 DELETEON 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 DELETEON 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触发器的使用,以优化代码逻辑和最大程度地特取实用性和功能性。