oracle触发器

Posted 沙漠皇帝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

效果如下:

以上是关于oracle触发器的主要内容,如果未能解决你的问题,请参考以下文章

如何设置 vscode 的代码片段,以便在自动完成后自动触发 vscode 的智能感知?

片段创建的 Intent 不会触发 onNewIntent

导航到另一个片段时触发 API 调用

我如何使用 codeanywhere 片段

Client / Server Interoperability Support Matrix for Different Oracle Versions (Doc ID 207303.1)(代码片段

前端防扒代码片段