• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PL/SQLの例外処理で出力しないようにしたい)

PL/SQLの例外処理で出力しないようにする方法

このQ&Aのポイント
  • PL/SQLの例外処理で、エラーメッセージを出力しない方法について教えてください。
  • カーソルFOR LOOPの次のレコードに行くために、エラーメッセージを出力しないようにする方法を教えてください。
  • PL/SQLの例外処理で、エラーメッセージを表示しないようにする方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

null文は何もしないという意味です。 > v_err_msg :の規定値を『エラーなし』として全ての処理が終わった後に、カラム > ごとの値をまとめて出力する際に『エラーなし』と出力されるようになっていま > す。 この処理をどこに置いてあるかによって動作が違ってきます。 BEGIN FOR c_rec IN c_cur LOOP   /*事業者テーブルからデータを探す*/   BEGIN     SELECT cust_id, unit_sec     INTO v_cust_id, v_unit_sec     FROM m_cust     WHERE op = c_rec.call     AND vc = c_rec.isdn;     /* 正常時処理 */   EXCEPTION     WHEN TOO_MANY_ROWS THEN       v_err_msg := '該当業者が複数見つかりました';       /* 例外処理 */     WHEN NO_DATA_FOUND THEN       NULL;   END; END LOOP; END; とすればいいのでは。 または BEGIN FOR c_rec IN c_cur LOOP   /*事業者テーブルからデータを探す*/   v_err_msg := 'エラーなし'   BEGIN     SELECT cust_id, unit_sec     INTO v_cust_id, v_unit_sec     FROM m_cust     WHERE op = c_rec.call     AND vc = c_rec.isdn;   EXCEPTION     WHEN TOO_MANY_ROWS THEN       v_err_msg := '該当業者が複数見つかりました';     WHEN NO_DATA_FOUND THEN       v_err_msg := 'NOT_FOUND';   END;     /* 処理 */ END LOOP; END; として、「/* 処理 */」の部分で v_err_msg の内容で処理を分岐させるかでしょう。

tao0417
質問者

お礼

/*処理*/のところに分岐を置いて解決しました! ありがとうございました。

その他の回答 (1)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

NULL文を使ってみては。 BEGIN FOR c_rec IN c_cur LOOP   /*事業者テーブルからデータを探す*/   BEGIN     SELECT cust_id, unit_sec     INTO v_cust_id, v_unit_sec     FROM m_cust     WHERE op = c_rec.call     AND vc = c_rec.isdn;   EXCEPTION     WHEN TOO_MANY_ROWS THEN       DBMS_OUTPUT.PUT_LINE('該当業者が複数見つかりました');     WHEN NO_DATA_FOUND THEN       NULL;   END; END LOOP; END; のように。

tao0417
質問者

補足

回答していただいてありがとうございます。 何もエラーがないものを『エラーなし』としたかったのでv_err_msg :の規定値を『エラーなし』として 全ての処理が終わった後に、カラムごとの値を まとめて出力する際に『エラーなし』と出力される ようになっています。 その上で、NULLを試してみたところ、『エラーなし』と いう形で他のエラーなしの項目と同様に出力されてしまいました。 NULLは何もしないということで、他のエラーなしのものと同様に 扱うということなのでしょうか?