概要
SELECT INTOで、複数行の取得で「ORA-01422: 完全フェッチがリクエストよりも多くの行を戻しました」のエラーが起きた場合の例外処理のやり方について、解説します。
例外処理のやり方
ソースコード
DECLARE
emp_name VARCHAR2(20);
BEGIN
BEGIN
SELECT name INTO emp_name FROM emp;
EXCEPTION
WHEN too_many_rows THEN
DBMS_OUTPUT.PUT_LINE('複数行取得エラー発生');
END;
END;
実行結果
「複数行取得エラー発生」のメッセージが表示されます。
解説
SELECT INTOで複数行が取得されて変数に代入すると、too_many_rows例外が発生するので、例外処理部で、その例外が発生したときの処理を記載します。
例外発生時の処理は、今回の場合、メッセージの表示だけですが、実際には例外が発生した場合は、ロールバックをしたり、デフォルト値を設定したり等の考慮が必要です。