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;

效果如下:

posted @   沙漠皇帝  阅读(152)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示

目录导航