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

いつもお世話になっております。
以下のようなファンクションの中でカウント数を戻り値として返したかったのですが、当然「0」の場合は「0」で返したいのですが、当初以下の場合には「ORA-01403: データが見つかりません。」エラーが発生し上手くいきませんでした。

省略
begin
select count(colA) into aaa ~~ group by colB;
ret = nvl(aaa,0)
return ret;
end;

調査のためselect文だけを切り取りSQLPlusにて実行したところ、「レコードが選択されませんでした」となっておりました。

今度は試しに、「select count(count(colA)) into aaa ~~ group by colB;」としたところ、「0」で返ってきましたし、1以上の場合も正しい数値で返ってきました。
同じようにselect文だけを切り取りSQLPlusにて実行したところ、以下のような結果となりました。

count(count(colA))
---------------------

これは、nullという意味になるのでしょうか??
「レコードが選択されませんでした」との違いはなんなのでしょうか?また、通常PL/SQLにてカウント数=0を返したいときはどのようにするものなのでしょうか?ご教授いただければと思います。
宜しくお願い致します。

A 回答 (1件)

後者のケースではこちらで試した限りは


count(count(colA))
---------------------
0
というようにゼロが返ってきますね。

ただ、問題はそこよりも「Group By」していることだと思います。
Group Byは条件に合致したレコードに対して行うので、該当するレコードがなければ、キーも存在しないので、NULLになりますが、
Group Byを切らなければ、かならず0が返るはずです。

もし、グルーピングしたColBの件数が取りたくてやっているのであれば、
SELECT COUNT(DISTINCT ColB) FROM ...が普通です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
SELECT COUNT(DISTINCT ColB) FROM ...で上手くいけました。
ただ、0は返ってこずNULLになりましたが。。

お礼日時:2009/01/20 23:36

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