2012-08-09 19 views
5

私はINSERT文を書き、PL/SQLブロックのテーブルに1行挿入します。この挿入が失敗した場合、または行が挿入されていない場合は、以前に実行された更新ステートメントをロールバックする必要があります。Sql Insert文return "ゼロ/行が挿入されていません"

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

+2

あなたの 'INSERT'文は' INSERT ... VALUES'文ですか?または 'INSERT ... SELECT'? –

+1

INSERTステートメントは次のようなものです。INSERT ... VALUES – Sekhar

答えて

15

の値を確認することができますが1つの行を挿入したり、例外を生成したりします。 SQL%ROWCOUNTを確認する必要はありません。

あなたINSERT文はINSERT ... SELECTとして構成されている場合は、それはSELECT文が0行が返される可能性があり、INSERT文は0行を挿入し、例外がスローされません。これをエラーとみなす場合は、INSERTステートメントを実行した後にSQL%ROWCOUNTをチェックする必要があります。

+0

優秀な回答!私はいつもこれがどうして起こるか疑問に思ってきました。 – Gili

2

あなたINSERT文がINSERT ... VALUESとして構成されている場合は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; 
関連する問題