- ベストアンサー
カーソル0件の時にエラーを発生させる
以下の処理をしようと考えています。 Aテーブルをカーソルで検索 →0件だった場合にはエラー ・・・ (1) →データが入っていた場合には処理 →カーソルのデータがなくなったら処理を正常終了 カーソルに入っているデータが0件だった場合、Oracle上ではエラーとはみなされず、処理が正常終了してしまいます。 カーソルデータが0件だった場合にエラーを発生させるにはどのようにコーディングすればよいですか?
- みんなの回答 (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;
その他の回答 (1)
- muyoshid
- ベストアンサー率72% (230/318)
こんにちわ。 PL/SQL ならFetch 直後に curs%NOTFOUND で判断可能です。 Pro*C なら、sqlca.sqlerrd[2] に処理件数が入りますので、この値が0か どうかで判断できます。
補足
loop fetch cv into jcrec; exit when curs%notfound; 処理 end loop; close cv; 回答ありがとうございます。 「curs%notfound」とは上記のような使い方を指しているのでしょうか? もしそうであるならば、カーソルで複数行データを取得し、カーソルにデータがなくなったらループをぬける(正常処理)という動きになると思います。 カーソルが0件の場合にも同じように正常処理でぬけてしまって、エラーにならないと思うのですが、間違っていますでしょうか?
お礼
なるほど!有難うございました。 解決です!!