[200分]oracle中触发器中的after和before有什么区别,分别用在什么场合!还有语句级触发和行级触发有什么区别?给些实例

zsq666 2007-03-26 06:01:44
1、oracle中触发器中的after和before有什么区别
2、分别用在什么场合
3、还有语句级触发和行级触发有什么区别?
给些实例如果可以运行马上结帖!
...全文
3451 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
tywoaiqq 2012-03-28
  • 打赏
  • 举报
回复
哈哈 这贴5年了~
tywoaiqq 2012-03-28
  • 打赏
  • 举报
回复
哈哈 这贴5年了~
liyongjie 2012-03-05
  • 打赏
  • 举报
回复
http://blog.csdn.net/liyongjie/article/details/3018274
zhang198803 2012-02-20
  • 打赏
  • 举报
回复
哈哈,学校中,大家一起努力哦
liujun3512159 2011-11-15
  • 打赏
  • 举报
回复
就是,太不厚道了,还不结贴?
studying_ 2009-12-22
  • 打赏
  • 举报
回复
junqiang(蓝色海洋)



hongqi162(失踪的月亮)
已经说的较完整了
gxjwqm 2009-12-21
  • 打赏
  • 举报
回复
不错啊
hanxiao1999 2009-12-20
  • 打赏
  • 举报
回复
可能是准备散分
hebo2005 2009-12-18
  • 打赏
  • 举报
回复
晕死,2年多前的贴子还没结,还有人翻出来
xieyicool 2009-12-18
  • 打赏
  • 举报
回复
学习中。。。。
crazylaa 2009-12-18
  • 打赏
  • 举报
回复
2007年3月的火星帖啊!!!

大家还回答的这么欢,楼主太不后道了,还不结帖。。。。
给点纷纷。。。
BenChiM888 2009-12-18
  • 打赏
  • 举报
回复
一、最简单的区别,当然还有其他的区别
1、触发顺序上有所区别
语句级别触发器before
行级别触发器before
行级别触发器after
语句级别触发器after
2、触发次数区别 语句级别触发器只触发一次、行级触发器是作用了多少行触发多少次。

[TEST@ora10gr1#2009-12-18/21:08:09] SQL>create or replace trigger t1_triger_before
2 before insert on t1
3 begin
4 dbms_output.put_line('语句级别触发器before');
5 end;
6 /

Trigger created.

[TEST@ora10gr1#2009-12-18/21:08:09] SQL>create or replace trigger t1_triger_after
2 after insert on t1
3 begin
4 dbms_output.put_line('语句级别触发器after');
5 end;
6 /

Trigger created.

[TEST@ora10gr1#2009-12-18/21:08:09] SQL>create or replace trigger t1_triger_before_each_row
2 before insert on t1 for each row
3 begin
4 dbms_output.put_line('行级别触发器before');
5 end;
6 /

Trigger created.

[TEST@ora10gr1#2009-12-18/21:08:09] SQL>create or replace trigger t1_triger_after_each_row
2 after insert on t1 for each row
3 begin
4 dbms_output.put_line('行级别触发器after');
5 end;
6 /

Trigger created.

[TEST@ora10gr1#2009-12-18/21:08:09] SQL>
[TEST@ora10gr1#2009-12-18/21:08:09] SQL>set serveroutput on
[TEST@ora10gr1#2009-12-18/21:08:09] SQL>--注意触发顺序
[TEST@ora10gr1#2009-12-18/21:08:09] SQL>insert into t1 values(1,'a');
语句级别触发器before
行级别触发器before
行级别触发器after
语句级别触发器after

1 row created.

[TEST@ora10gr1#2009-12-18/21:08:09] SQL>--注触发发次数
[TEST@ora10gr1#2009-12-18/21:08:09] SQL>insert into t1
2 select 1,'a' from dual union all
3 select 2,'b' from dual union all
4 select 3,'c' from dual;
语句级别触发器before
行级别触发器before
行级别触发器after
行级别触发器before
行级别触发器after
行级别触发器before
行级别触发器after
语句级别触发器after

3 rows created.

puhaiggp 2009-12-18
  • 打赏
  • 举报
回复
1、oracle中触发器中的after和before有什么区别
一个是在记录操作之前触发,一个是在记录操作之后触发。

2、分别用在什么场合
比如表之间定义的有外键,在删除主键时,必须要先删除外键表,这时就有先后之分。

3、还有语句级触发和行级触发有什么区别?
如果定义为语句级,则Delete from t执行时,触发器只运行一次,如果定义为行级,则上面的Delete操作将使触器运行多次(有几条记录就运行几次)。
wh62592855 2009-12-18
  • 打赏
  • 举报
回复
呵呵 我发现有时候CSDN会错乱一样
几年前的帖子被放在第一页
要不然就是已经结贴的帖子放在第一页
很奇怪
baojianjun 2007-03-28
  • 打赏
  • 举报
回复
完全建议楼主去看看基础的ORACLE书籍 上面都有很完整的介绍
yuyu1980 2007-03-28
  • 打赏
  • 举报
回复
该结贴了
issgates 2007-03-27
  • 打赏
  • 举报
回复
可以参考 oracle触发器与存储过程
专门讲这个的。触发器一般用来保证数据完整性,存储过程据说用来提高复杂逻辑的处理效率,但实际使用中不建议用存储过程,按分层的思想,持久层就不应出现业务逻辑,建议将此部分转移动代码中实现。

细节楼上已经说明了,我就不重复了。
tgm78 2007-03-27
  • 打赏
  • 举报
回复
junqiang(蓝色海洋)



hongqi162(失踪的月亮)
已经说的较完整了
zhaokun521 2007-03-27
  • 打赏
  • 举报
回复
1:after是表经过修改以后才触发,before就正好是在保存之前就触发
2:比如:
create or replace trigger tri_emp
before inert or update deptno on emp
for each row
when (new.deptno<>40)
begin
:new.comm:=0;
end;
/
这段的意思就是创建或替代tri_emp触发器。
在插入或者更新表emp的每一行的deptno这一列之前如果新的DEPTNO的值不等于四十
然后就执行SQL块里的内容。如果把before换成after的话就是在插入或更新之后做后面的操作.
3:行级触发器是对DML语句影响的每个行执行一次
如update语句影响多行,就会对每行都激活一次触发器。
而语句级触发器是对每个DML语句执行一次
如insert语句在表中插了300多行,那么这个表上的insert语句级触发器只会执行一次。

这样说你能明白了不?
cfm711 2007-03-26
  • 打赏
  • 举报
回复
1、oracle中触发器中的after和before有什么区别
before是在语句执行之前执行触发器,after是在语句执行之后再执行触发器的,但两种情况下语句都会执行.
2、分别用在什么场合

3、还有语句级触发和行级触发有什么区别?
语句级触发器是在整个语句执行的前或后 执行,而行级是对于一行操作来说的 ,语句级的可以阻止某些语句的执行.
加载更多回复(5)

17,091

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧