これまでで一番「情けなかったとき」はいつですか?

以下の処理をしようと考えています。

Aテーブルをカーソルで検索
    →0件だった場合にはエラー ・・・ (1)
    →データが入っていた場合には処理
    →カーソルのデータがなくなったら処理を正常終了

カーソルに入っているデータが0件だった場合、Oracle上ではエラーとはみなされず、処理が正常終了してしまいます。
カーソルデータが0件だった場合にエラーを発生させるにはどのようにコーディングすればよいですか?

A 回答 (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;
    • good
    • 2
この回答へのお礼

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

お礼日時:2012/11/13 23:33

こんにちわ。



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件の場合にも同じように正常処理でぬけてしまって、エラーにならないと思うのですが、間違っていますでしょうか?

補足日時:2012/11/08 19:04
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


おすすめ情報

このQ&Aを見た人がよく見るQ&A