前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PL/SQL学习笔记-触发器

PL/SQL学习笔记-触发器

作者头像
liulun
发布2022-05-09 11:05:24
1550
发布2022-05-09 11:05:24
举报
文章被收录于专栏:liulun

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

代码语言:javascript
复制
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;

执行以下代码测试

代码语言:javascript
复制
insert into labor.xland (xland.title,xland.content,xland.state) values ('123','234',3);

ORACLE抛出异常

image
image

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

代码语言:javascript
复制
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;

执行以下代码测试

代码语言:javascript
复制
insert into labor.xland (xland.title,xland.content,xland.state) values ('xland','cha1',3);

结果:

image
image

在行级触发器中可以对列的值进行访问(很重要!) 列名前加   :old.    表示变化前的值 列名前加   :new.    表示变化后的值 在when子句中不用冒号。 三:instead of 触发器(视图上的触发器) 先看代码

代码语言:javascript
复制
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语句和其他触发器没什么大区别 四:删除触发器

代码语言:javascript
复制
drop trigger t_xland;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2009-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档