6

プロシージャに複数の update ステートメントと insert ステートメントがあります。

以下の例を参照してください。

手順例

- コード

更新 1

挿入 1

更新 2

Update 3 -- 例外が発生したと仮定

ここで、最初の更新ステートメントが更新または挿入に影響を与えないことを意味する前にロールバックしたいと思います。

4

3 に答える 3

8
BEGIN

  Savepoint do_update_1;

  Update 1;

  insert 1;

  Update 2;

  Update 3; --Suppose exception occurs

EXCEPTION
  WHEN some_exception THEN Rollback To do_update_1;
END;


====== 編集 ==========

作業例: http://sqlfiddle.com/#!4/b94a93/1

create table tttt(
  id int,
  val int
)
/

declare 
  x int := 0;
begin
  insert into tttt values( 1,1);
  insert into tttt values( 2,2);
  Savepoint do_update_1;

  insert into tttt values( 3,3);
  update tttt set val = 0 where id = 2;
  update tttt set val = 10 / val where id = 2;

exception
  when zero_divide then rollback to do_update_1;
end;
/
于 2014-05-05T04:21:44.620 に答える
0

exception when 句で例外をキャッチし、ロールバックステートメントを実行できます。

procedure test
is
begin
    Insert into t values (1);
    Update t set x = 1;
exception when <your exception> then
    Rollback;
end;
于 2014-05-05T04:22:56.587 に答える