Oracle Client 10g (すべてのバージョン)、11gR1 (v11.1.0.6)を呼び出す ODBC API を使用する現在の C++ アプリケーションは、LONG (4 バイト整数) を返します。
SELECT COUNT(*) from tablename
Oracle クライアントを 11gR1 (v11.1.0.7) 以降 (11.2.xy など) に変更すると、同じステートメントが DOUBLE (Oracle NUMBER データ型に相当する 8 バイトの浮動小数点値) を返します。
バックエンド DB は同じバージョンであるため、この Aggregate SQL 関数のデフォルトの動作を long ではなく double を返すように変更したクライアント側の設定 (推定) が必要です。ODBC API呼び出しを介してプログラムで設定するか、Oracleクライアント構成自体で設定できるような設定を見つけたいと思っています。
私もそれを使用しようとしSQL CAST
ましたINT
SELECT CAST(COUNT(*) AS INT) FROM tablename
が、それでもDOUBLE
(8バイトのフローティングNUMBER)を返します。
注: 私は ODBC を使用しているため、戻り値を LONG としてサポートする一般的な C++ コードを大量に作成しました。これは、ODBC 経由で 10 年間そうしてきた方法です。可能であれば、アプリケーション内で ORACLE 固有のコードを記述することなく、それを維持したいと考えています。