アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になります。

WindowsVista Oracle10gの環境にて、以下のようにPL/SQLを作成し、結果を確認しましたが、最終レコードが重複してしまいます。
SQL文が悪いのかと思い、切り出してSQLPlusで確認しましたが正しく返ってきます。

DECLARE
type cur_type is ref cursor;
souk_cur cur_type;
vSql varchar2(2000);
BEGIN
vSql := ' select ~ from TableA'
open souk_cur for vSql;
loop
fetch souk_cur into p1;
dbms_output.putline(p1)
exit when souk_cur%notfound;
end loop;
close souk_cur;
END;
/

<結果>
1 あああ
2 いいい
3 ううう
3 ううう

試しにorder byで並べ替えると、
<結果>
3 ううう
2 いいい
1 あああ
1 あああ

と、やはり最終レコードが重複します。

どなたかご存知の方おられましたらご教授願えませんでしょうか?
宜しくお願い致します。

A 回答 (2件)

>EXITをLOOPの直後に持ってきましたが結果は同様でした。


FETCHの後じゃないと意味ないです。

loop
fetch souk_cur into p1;
exit when souk_cur%notfound;
dbms_output.put_line(p1);
end loop;
close souk_cur;
END;
    • good
    • 0

単にDBMS_OUTPUTの場所が悪いだけです。


カーソルが空になったかどうか評価する前に書き出しているから、カーソルが空になっても1回書いてしまっています。
EXIT文が先にあるべきです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

最初はそのように思い、EXITをLOOPの直後に持ってきましたが結果は同様でした。
他に考えられることはありませんでしょうか?
再度、こちらでも確認してみます。

お礼日時:2009/02/20 00:38

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

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