急急:我要实现在oracle存储过程中,如果前面的DML执行成功,就提交,如果前面的有异常就全部回滚。

我要实现在oracle存储过程中,如果前面的DML执行成功,就提交,如果前面的有异常就全部回滚。这样的语句我该怎么写呢?... 我要实现在oracle存储过程中,如果前面的DML执行成功,就提交,如果前面的有异常就全部回滚。

这样的语句 我该怎么写呢?
展开
 我来答
legen1226
2013-04-18 · TA获得超过214个赞
知道小有建树答主
回答量:140
采纳率:100%
帮助的人:82.7万
展开全部
begin
sql语句;
exceptions when others then
rollback;
end;
就这样可以了,执行成功的会提交的
zzkongfu
2013-04-18 · TA获得超过154个赞
知道小有建树答主
回答量:160
采纳率:0%
帮助的人:110万
展开全部
在exception 里面加入rollback, 在procedure 最后加入commit
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yfshuai
2013-04-18 · 超过20用户采纳过TA的回答
知道答主
回答量:39
采纳率:0%
帮助的人:39.7万
展开全部
你这里的执行成功是什么意思?语法错误DML会失败?还是DML效果不是你理想得到的算失败?
更多追问追答
追问
比如我上面是两条update语句,如果执行成功了,就commit,如果错误了,就回滚.
create or replace procedure test
as
begin
update rs_score_card set kpi_value=999 where quarter='201201' and asso_code='1' and kpi_code='kpi00001';
commit;
exception when others
then
rollback;
end;
比如 这样可以不?
追答
这个语法应该是没问题的,但是其实单独看这个存储过程是没有意义的。
你的update本身报错的话,就不可能commit;相应的rollback也没有意义。
我想你的意思是,好几个dml语句,如果其中一个有错,就全部rollback是吧?
这样写也行,但是不利于排查错误,不知道到底是哪个dml出错,也不知道是什么原因错误。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式