• 締切済み

動的SQLのCOUNTのとり方

動的SQLで、DBの件数を取得したいのですが、 うまく取得できず困っています。 教えてください! 以下の様に、記述しているのですが取り方間違っていますか? EXEC SQL EXECUTE statment INTO :CNTNUM; PREPEAした、statmentには SELECT COUNT(*) FROM テーブル名 where kbn = 3; と、ごくごく普通のSELECT COUNT文です。 cnt_numは、int型のホスト変数で宣言しています。 デバックしながら実行すると、cnt_numの値は初期化した時の 0のままです。実際取得した件数が0件なのかもと思い 初期化時に3を代入して実行したら、やはり値は3でした。 なので、件数が取得出来ていないようです。 オラクルエラーにもならず、次の処理へ流れていってしまいます。 知っている方、教えてください。

みんなの回答

回答No.1

動的SQLはあまり使わない上、Pro*Cでくらいしか使ったことがないんで、 かなりうろ覚えですが・・・。 INTOのところをUSINGにして、 INTOはFETCHで使ってみてください。 もしくは、PREPARE →DECLARE →OPEN→FETCH →CLOSEの順でやってみてください。

関連するQ&A

  • Symfowareでの動的SQL

    富士通のSymfowareでC言語での動的SQLを使ったプログラムを実行したいのですが、疑問点が2点あります。 諸事情でマニュアルも環境もないのにコーディングしないといけません。 1.EXEC SQL EXECUTE IMMEDIATE 'SQL文' ; は使用できますか? ORACLEなどでは EXEC SQL EXECUTE IMMEDIATE 'DELETE FROM A' ; などと記述できますが・・・ 2.検索系(SELECT)も1.のように動的に 実行したいのですが、検索結果をカンマ区切りで 編集する必要があります。 しかも、SELECT文は文字列としてくるので、 あらかじめ構造体等で定義してFETCHするようなこと   はできません。 ORACLEの場合は、ちょっと難しいですが、できるようです。 Symfowareでは可能でしょうか? Symfowareの情報があまりにも少ないので、わかる範囲でかまいません。 よろしくお願いします。

  • SQLのSelect Countについて

    たびたびお世話になります。 以下のSQLを実行したらエラーになりましたが原因がわかりません。 select count(A), A from TableA where A > 0 and B is not null; 同時に該当するデータ件数とその項目を取得したかったのですが、なぜ上記のSQLがエラーになるのかわかりません。 教えてください、お願いします_(._.)_

  • SQL count 別名を条件に使用

    いつもお世話になっております。 標題についてご教授頂きたく質問させて頂きました。 [SQL} select A, B, count(*) as cnt from product where A=1 and cnt > 2 group by A order by cnt desc とこのようにSQLを記述して実行したのですが、 cnt>2でエラーが出ます。 order by には count の別名を使用できるのですが、 where句やHAVINGでは使えません。 この場合 cont(*)>2 またはcount(項目名)>2 としなければならないのでしょうか

  • count(*)のcountをとりたい

    現在、以下のようなテーブルを扱っているのですが、 +---------+ |accountid| +---------+ |   999| |   999| |   638| |   638| |   638| |   999| |   999| |   638| +---------+ を、ユニークな件数でとろうとしています。 現在は > select count(*) from TABLE group by accountid; +----------+ | count(*)| +----------+ |     4| |     4| +----------+ 2 rows in set (0.00 sec) などとして、「2 rows in set」を読むと言う方法なのですが、それだと人の手を介さないといけないのでどうにか出力結果をダイレクトに取得したいのです。 SQLサーバで使えるらしい select count(*) from (select count(*) from TABLE group by accountid) as AA; と言うSQL文を使っても無理だったので、どなたか方法をご存じないでしょうか???

    • ベストアンサー
    • MySQL
  • 動的にSQLを作成し、値を取得する方法について

    Pro*Cでテーブル名を動的に与え、カラムの1つであるシーケンス番号の最大値を取得しようとしています。 ネットで調べたところ、 EXEC SQL DECLARE S1 STATEMENT; sprintf(buf1, "実行するSQL文", ); EXEC SQL PREPARE S1 FROM :buf1; EXEC SQL EXECUTE S1 INTO :取得結果格納領域; という構文で出来るということがわかったのですが、最後のところで、取得結果格納領域に値が入りません(正確には初期値「0」が入ります)。 取得したいデータを直接SQL*PLUSで実行すると0ではない値となるのですが、どのようにすれば値が取得できるかをご教授いただければと思います。 実行するSQL文の中には「%s」を含んでおり、sprintfの第3引数でテーブル名を渡しているので、buf1の中身はそのままSQL*PLUSで実行できる内容となっています。 それぞれのEXEC SQLの後にSQL終了コード(sqlca.sqlcode)を取得しましたが、どれも0(正常終了)で終わっていました。 どうかご教授のほど、よろしくお願いします。

  • oracleのPL/SQLでEXECのエラーの確認

    EXECUTEコマンドのエラーの確認につてい教えてください。 EXECUTEコマンドでutl_fileパッケージをL/SQLを実行しているのですが、 そこで、EXECUTEコマンドのエラー判定をしたいのです。 EXECUTEの実行エラーを取得し判定したい。 エラー判定はできますか。 できるとした場合、エラー時はその時点で終了したい。 どのような書き方になるのですか。 実行したSQLは以下となります。 set serveroutput on exec utl_file.fremove('DATA_PUMP_DIR','hogehoge.txt'); →ここでエアー取得と判定がしたい VARIABLE rtn NUMBER DECLARE BEGIN :rtn := 0; select count(*) from d; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLCODE||','||SQLERRM); :rtn := 16; END; / EXIT :rtn oracleは19cです。 よろしくお願いします。

  • select count の同一sqlで割り算

    Oracleのsql*plusで 以下のsqlを実行しています。 select count(*) from tableA ; 上記のの結果としてカウント結果が返却されているのですが、今回はその結果を割り算したいのです。イメージとしては以下のとおりです。 [select結果÷n] さらにいうと上記のような計算を同一sql内で計算できることは可能でしょうか。 また、sql内での計算が難しいようでしたら他方法をご教授していただけませんでしょうか。 勉強不足で、すみません。 ご協力、よろしくお願いします。

  • DBMS_SQL.EXECUTEの問合せ結果件数

    DBMS_SQL.EXECUTE()で動的SQLを発行したとき、 問合せ結果の件数は、どのようにすれば取得できるでしょうか。 できればSELECT COUNT(*)は発行しないで行いたいです。 動的SQLを発行した際に、取得結果が0件もしくはNULLが帰ってきた場合に例外処理を行いたい為です。 どなたかご存知の方いらっしゃいましたら、 ご教示の程宜しくお願い致します。

  • ODBC接続でデータ件数を求める方法を教えてください

    いつもお世話になっております。 ODBCサーバー:IBM DB2(UDB)なのですが、下記コードを実行しても 件数が表示されず取得できませんでした。 何方か上記サーバーで件数を取得する方法をご存知でしたら、ご教授お願いいたします。(表示データ件数のコントロールをしたいのです) $con2 = odbc_connect($ODBCDSN2, $DSNUSER2, $DSNPASS2); $sql2 = "SELECT Count(*) AS cnt FROM tabl1"; $rst2 = odbc_exec($con2, $sql2); $col2 = odbc_fetch_array($rst2); $tcnt = $col2[cnt]; print "tcnt="; print $tcnt; 上記コードを、ODBC MySQLで実行すると件数が表示されますのでIBM DB2(UDB)固有の 状況だと思うのですが・・・どうしたらいいのか解りません。

    • 締切済み
    • PHP
  • エラーコード取得

    バッチファイルにて実行するSQLファイルで以下の処理を行っています。 --------------------------------------- SELECT COUNT(*) as count_num FROM TEST_TABLE if(count_num)=0 then EXIT; --------------------------------------- 上記の処理でSQLエラー発生時はEXITするといった 処理にしたいのですが、エラーコード取得方法が わかりません! どなたかご教授お願い致します。 -環境- WindowsXP SP2 Oracle 10.1.0.2

専門家に質問してみよう