スポンサーリンク

[PL/SQL] SELECT INTO 複数行のエラー処理

概要

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例外が発生するので、例外処理部で、その例外が発生したときの処理を記載します。

例外発生時の処理は、今回の場合、メッセージの表示だけですが、実際には例外が発生した場合は、ロールバックをしたり、デフォルト値を設定したり等の考慮が必要です。