Oracle パッケージで使用する必要がある一連の更新ステートメントがあります。まれですが、更新ステートメントの 1 つが「単一行のサブクエリが 1 つ以上の行を返します」エラーをスローする結果となる、時折の避けられないユーザー エラーが発生する場合があります。
私はOracle PL/SQlの例外処理を調べていましたが、パッケージがクラッシュしないように、この例外をキャッチする方法と何を使用するかについて少し行き詰まっています。
事前に作成された「Too Many Rows」例外句が存在することは知っていますが、私が読んだものはすべて、それが不適切な挿入ステートメントに使用されていると言っているようです。
これを例外として使用できますか? または、独自の例外句を作成する必要がありますか。私はこれまで自分で構築したことがなく、必要なものすべてをどこに置くかについて大まかな考えしかありません。
次のコードは基本的に、この特定の手順で更新を設定する方法ですが、簡潔にするために、外観の基本的な例のみを使用しています。
INSERT INTO TempTable... --(Initial insert statement)
UPDATE TempTable t SET t.Row_one = (SELECT (Statement_One))
WHERE T.Row_One is NULL
UPDATE TempTable t SET t.Row_one = (SELECT (Statement_Two))
WHERE T.Row_One is NULL
UPDATE TempTable t SET t.Row_one = (SELECT (Statement_Three))
WHERE T.Row_One is NULL
-- Does the exception clause start here?
EXCEPTION
WHEN TOO_MANY_ROWS THEN
(What do I tell the Procedure to do here, what am I able to tell it to do?)
--end of updates that need the exception handling
-- more insert statements into other tables based on data from the preceding Temp Table
END;
これは機能しますか、それともカスタム例外を作成する必要がありますか?
前もって感謝します。