存储过程中的约束更新语句

时间:2016-11-12 08:13:47

标签: oracle stored-procedures plsql

我想在存储过程中编写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查询检查第一个更新语句的状态作为更新的表 - 它太大了。

1 个答案:

答案 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

我已经注释掉了您的提交声明,因为您需要确保了解其含义。我通常希望过程中的所有状态都是同一逻辑事务的一部分,事务控制由调用者(或调用者)处理。如果您在第一次更新后提交并在第二次更新时收到错误,那么您的数据可能会处于不一致状态。