9

INSERTPL/SQL ブロック内のテーブルに 1 行を挿入するステートメントを作成しています。この挿入が失敗した場合、または行が挿入されていない場合は、以前に実行した更新ステートメントをロールバックする必要があります。

INSERTどのような状況でステートメントが 0 行を挿入できるかを知りたいです。何らかの例外が原因で挿入が失敗した場合は、例外ブロックで処理できます。INSERTが正常に実行されても、例外がスローされない可能性があるかどうかを確認する必要がある場合はありますかSQL%ROWCOUNT < 1?

4

3 に答える 3

24

INSERTステートメントが として構成されている場合、INSERT ... VALUES1 行だけが正常に挿入されるか、例外が生成されます。をチェックする必要はありませんSQL%ROWCOUNT

INSERTステートメントが として構造化されている場合、ステートメントが0 行を返し、INSERT ... SELECTステートメントが 0 行を挿入し、例外がスローされない可能性があります。これがエラーであると思われる場合は、ステートメントの実行後にを確認する必要があります。SELECTINSERTSQL%ROWCOUNTINSERT

于 2012-08-09T05:22:53.740 に答える
3

はい、DML ステートメント (INSERT、UPDATES など) によって影響を受ける行数を調べるには、次の値を確認できます。SQL%ROWCOUNT

INSERT INTO TABLE
SELECT col1, col2,....
  FROM TAB;

if SQL%ROWCOUNT=0 then
   RAISE_APPLICATION_ERROR(-20101, 'No records inserted');
end if;
于 2012-08-09T05:21:18.697 に答える