PL/SQL学习笔记-触发器

一:语句级触发器
语句级触发器是指当执行DML操作时,以语句为单位执行的触发器
(注意与下面提到的行级触发器比较)
先看代码

create or replace trigger xland_trigger
before insert
or update
or delete
on labor.xland
begin
if(to_char(sysdate,'DAY') in ('星期六','星期日'))
or (to_char(sysdate,'HH24') not between 8 and 18) then
raise_application_error(-20001,'不是上班时间');
end if;
end;


执行以下代码测试

insert into labor.xland (xland.title,xland.content,xland.state) values ('123','234',3);

ORACLE抛出异常
image 

二:行级触发器
行级触发器是指执行DML操作时,以数据行为单位执行的触发器,每一行都执行一次触发器
先看代码:

create or replace trigger xland_trigger
before insert 
on labor.xland
for each row
begin
   if :new.title = 'xland' then
      insert into labor.xland (xland.title,xland.content,xland.state) values ('123','cha2',3);
   end if;
end;

执行以下代码测试

insert into labor.xland (xland.title,xland.content,xland.state) values ('xland','cha1',3);


结果:
image 
在行级触发器中可以对列的值进行访问(很重要!)
列名前加   :old.    表示变化前的值
列名前加   :new.    表示变化后的值
在when子句中不用冒号。

三:instead of 触发器(视图上的触发器)
先看代码

create or replace trigger t_xland
instead of insert
on v_xland
for each row
begin
insert into xland (title,content,state) values ('1','1',1);
end;


其实就是取代了insert语句和其他触发器没什么大区别

四:删除触发器

drop trigger t_xland;
posted @   liulun  阅读(1431)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示