【发布时间】:2016-11-12 08:13:46
【问题描述】:
我想在存储过程中编写 3 个更新语句。如何确认只有在第一个更新语句成功完成后才会执行第二个和第三个更新语句?
create or replace procedure test
as
begin
update statement1;
commit;
--following block executes only when update 1 is sucessful
update statement2;
commit;
update statement2;
commit;
end;
我不想使用 SQL 查询检查第一个更新语句的状态,因为表正在更新 - 它太大了。
【问题讨论】:
-
你如何定义“成功”?没有发生错误;任何行都已实际更新;具体数量是;或者是其他东西? (为什么你在每条语句之后都提交 - 所有三个更新不应该是同一个事务的一部分吗?)
-
嗨,Alex,我只是想确保更新执行没有错误。
-
如果出现错误,则程序将终止,因为您没有捕获任何异常 - 调用者将看到引发的任何错误。这是默认行为。你不需要做任何其他事情。请注意,如果 second 更新出错,同样的事情也会发生,但是您已经提交了第一次更新,因此无论以后发生什么,更改都是永久性的。确保这是你真正想要的。
-
明白。但是让我们考虑一个场景,在 update statement1 中没有更新任何行。在那种情况下,我不想继续接下来的两个陈述。
标签: oracle stored-procedures plsql