为了账号安全,请及时绑定邮箱和手机立即绑定

行级触发器数据确认一旦不通过,使用raise_application_error抛出异常后就不继续执行后面所有行了吗?

行级触发器数据确认一旦不通过,使用raise_application_error抛出异常后就不继续执行后面所有行了吗?

怎么能只在不通过的行不执行,然后跳过该行继续执行下一行呢?

正在回答

1 回答

行级触发,就表明针对的是【行】。

如,表TABLE,有两个用户A,B在操作TABLE两行数据,A操作的行达到触发条件,自然按里面的逻辑执行;

B操作行没有达到触发条件,自然对原来行不做任何处理。您就把每一行看作在表里分隔开的对象就行了,互不干扰

1 回复 有任何疑惑可以回复我~
#1

STRONG很壮不怕撞 提问者

感谢回答:) 我之前应该是理解错了,之前没理解行级触发器触发的时候只是针对一行数据的操作,虽然触发器中写了 for each row 所以在涨工资的案例中,每更新一行就触发一次行级触发器,抛出异常也只影响这一行数据。
2016-04-18 回复 有任何疑惑可以回复我~
#2

qq_骑着蜗牛去旅行_03471935

不对吧,我实际测试的是:比如sal更改前的值是:1000,1500,3000,5000 我在if条件里面设置的是更新后的薪水如果大于2000,就抛出异常,但执行发现只抛出了3000的这一条异常,5000的没抛出, 对比执行前和执行后的情况,发现薪水字段内容没发生变化,一条都没有,虽然有一半的数据不符合异常条件 这就说明两点:1,如果有一条满足异常情况,所有的数据都更新不了 2,遇到符合异常的条件时,就报错不再继续往下执行
2016-07-06 回复 有任何疑惑可以回复我~
#3

qq_骑着蜗牛去旅行_03471935

这是我写的触发器 create or replace trigger checksalary before update on emp for each row BEGIN if :new.sal > 2000 then Raise_application_error(-20002,'无法更新'); end if; end; / 这是我执行的更新语句 update emp set sal=sal+1;
2016-07-06 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

行级触发器数据确认一旦不通过,使用raise_application_error抛出异常后就不继续执行后面所有行了吗?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信