我想在存储过程中编写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查询检查第一个更新语句的状态作为更新的表 - 它太大了。
答案 0 :(得分:3)
您可以看到有the SQL%ROWCOUNT
implicit cursor attribute的语句影响了多少行:
create or replace procedure test
as
begin
update statement1;
--commit;
--following block executes only when update 1 is sucessful
if sql%rowcount > 0 then
update statement2;
--commit;
update statement2;
--commit;
end if;
end;
如果没有更新行,则行数将为零,并且将跳过if
内的语句。
如果发生实际错误then execution stops anyway。
我已经注释掉了您的提交声明,因为您需要确保了解其含义。我通常希望过程中的所有状态都是同一逻辑事务的一部分,事务控制由调用者(或其调用者)处理。如果您在第一次更新后提交并在第二次更新时收到错误,那么您的数据可能会处于不一致状态。