- ベストアンサー
PL/SQLの例外処理で出力しないようにする方法
- PL/SQLの例外処理で、エラーメッセージを出力しない方法について教えてください。
- カーソルFOR LOOPの次のレコードに行くために、エラーメッセージを出力しないようにする方法を教えてください。
- PL/SQLの例外処理で、エラーメッセージを表示しないようにする方法について教えてください。
- みんなの回答 (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 の内容で処理を分岐させるかでしょう。
その他の回答 (1)
- nora1962
- ベストアンサー率60% (431/717)
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; のように。
補足
回答していただいてありがとうございます。 何もエラーがないものを『エラーなし』としたかったのでv_err_msg :の規定値を『エラーなし』として 全ての処理が終わった後に、カラムごとの値を まとめて出力する際に『エラーなし』と出力される ようになっています。 その上で、NULLを試してみたところ、『エラーなし』と いう形で他のエラーなしの項目と同様に出力されてしまいました。 NULLは何もしないということで、他のエラーなしのものと同様に 扱うということなのでしょうか?
お礼
/*処理*/のところに分岐を置いて解決しました! ありがとうございました。