2010-11-30 13 views
3

SQL(特にOracle-PL/SQL)のINSERTが例外をスローせずに失敗するケースはありますか?私はINSERTの後でコード内のチェックを見ています。それはSQL%ROWCOUNT = 1 ELSEがそれ自身のユーザー定義の例外を発生させることを確認します。私はそれがどうして起こるのか見ていない。PL/SQLで例外を発生させずにSQL INSERTが失敗する可能性があります

+3

挿入がクエリからのもので、複数の行が挿入された場合はどうなりますか? – Fosco

+0

データベースサーバーのディスクがいっぱいの場合はどうなりますか?笑ってはいけません - これは時々生産システムで発生します..... –

+0

例外が他の時null? – Rene

答えて

8

が失敗する可能性があります。例外はありません.例外はありません。おそらくコードを書いた開発者はそれを知らなかったでしょう。

after文トリガは、挿入されたばかりの行を削除する可能性があります。もちろん、INSERT ... SELECTは挿入する行が見つからないので、SQL%ROWCOUNT = 0となります。

2

前述のトリガベースの問題@mcabralに加えて、挿入に成功したが、1行以外の挿入があった可能性があります。たとえば、insert into blah(col1) select col2 from fooの挿入形式です。

2

@TonyAndrewsと@GinoAが述べたように、INSERTはいくつかの方法で正確に1つの行(トリガー、INSERT INTO tablename SELECT...構文)。

しかし、大きな問題はPL/SQLにあることです。このように、SQL%ROWCOUNT値は、COMMITまたはROLLBACKステートメントを含むプログラム実行フローを決定する条件として使用できます。

ユーザー定義の例外を発生させるだけでも、呼び出し側PL/SQLブロックは例外自体を処理できます。

EDIT:PL/SQL(質問自体に表示されているように)を示すために質問タイトルを修正する必要があります。これは、タイトルが示すSQLスコープと同じではないためです。

+1

私はタイトルと例外とPL/SQLを調整しました –

関連する問題