oracle触发器

oracle触发器

简介

​ 触发器是存储的程序,在发生某些事件时会自动执行或触发。 一般情况发生下面列表的情况而执行

  • DML(增删改)
  • DDL
  • DB OP,logon logoff,startup ,shutdown

触发器的好处

  • 自动完成某些工作
  • 安全
  • 防止一些无效操作
  • etc

创建触发器

CREATE [OR REPLACE ] TRIGGER trigger_name  
{BEFORE | AFTER | INSTEAD OF }  
{INSERT [OR] | UPDATE [OR] | DELETE}  
[OF col_name]  
ON table_name  
[REFERENCING OLD AS o NEW AS n]  
[FOR EACH ROW]  
WHEN (condition)   
DECLARE 
   Declaration-statements 
BEGIN  
   Executable-statements 
EXCEPTION 
   Exception-handling-statements 
END; 
  • CREATE [OR REPLACE] TRIGGER TRIGGER_NAME -创建或与替换现有触发TRIGGER_NAME
  • {BEFORE | 之后| INSTEAD OF} - 指定何时执行触发器。INSTEAD OF子句用于在视图上创建触发器。
  • {INSERT [OR] | 更新[或] | DELETE} - 这指定了DML操作。
  • [OF col_name] - 指定要更新的列名。
  • [ON table_name] - 指定与触发器关联的表的名称。
  • [引用旧的as n n] - 这允许您为各种DML语句引用新值和旧值,例如INSERT,UPDATE和DELETE。
  • [FOR EACH ROW] - 指定行级触发器,即将对受影响的每一行执行触发器。否则,触发器将在执行SQL语句时执行一次,这称为表级触发器。
  • WHEN(条件) - 这为触发器将触发的行提供条件。该子句仅对行级触发器有效。

eg

create or replace trigger show_changes
before delete or insert or update on emps
for each row
when(NEW.empno > 0)

declare
	sal_diff number;
begin
	sal_diff := :NEW.sal - :OLD.sal;
	dbms_output.put_line('old sal:' || :OLD.sal);
	dbms_output.put_line('new sal:' || :NEW.sal);
	dbms_output.put_line('diff sal:' || sal_diff);
end;

效果如下:

原文地址:https://www.cnblogs.com/qiudaozhang/p/9510559.html