• ベストアンサー

カーソル0件の時にエラーを発生させる

以下の処理をしようと考えています。 Aテーブルをカーソルで検索     →0件だった場合にはエラー ・・・ (1)     →データが入っていた場合には処理     →カーソルのデータがなくなったら処理を正常終了 カーソルに入っているデータが0件だった場合、Oracle上ではエラーとはみなされず、処理が正常終了してしまいます。 カーソルデータが0件だった場合にエラーを発生させるにはどのようにコーディングすればよいですか?

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

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.2

最初のFETCHをループの外ですればいいのでは。 open cur1; fetch cur1 into rec1; if cur1%notfound then close cur1; raise NO_DATA_FOUND; end if; loop --処理 fetch cur1 into rec1; exit when cur1%notfound; end loop; close cur1;

m0123456789
質問者

お礼

なるほど!有難うございました。 解決です!!

その他の回答 (1)

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.1

こんにちわ。 PL/SQL ならFetch 直後に curs%NOTFOUND で判断可能です。 Pro*C なら、sqlca.sqlerrd[2] に処理件数が入りますので、この値が0か どうかで判断できます。

m0123456789
質問者

補足

loop fetch cv into jcrec; exit when curs%notfound;  処理 end loop; close cv; 回答ありがとうございます。 「curs%notfound」とは上記のような使い方を指しているのでしょうか? もしそうであるならば、カーソルで複数行データを取得し、カーソルにデータがなくなったらループをぬける(正常処理)という動きになると思います。 カーソルが0件の場合にも同じように正常処理でぬけてしまって、エラーにならないと思うのですが、間違っていますでしょうか?

関連するQ&A