当前使用 ODBC API 调用 Oracle Client 10g(所有版本)、11gR1 (v11.1.0.6) 的 C++ 应用程序返回一个 LONG(4 字节整数)
从表名中选择 COUNT(*)
将 Oracle 客户端更改为 11gR1 (v11.1.0.7) 或更高版本(11.2.x.y 等),同一语句返回 DOUBLE(相当于 oracle NUMBER 数据类型的 8 字节浮点值)。
由于后端数据库是同一版本,因此必须有一个客户端设置(我假设)更改了此聚合 SQL 函数的默认行为以返回 double 而不是长整数。我希望找到这样的设置,既可以通过 ODBC API 调用以编程方式设置,也可以在 Oracle 客户端配置本身中设置。
我什至尝试使用 SQL CAST
使其成为 INT
从表名中选择 CAST(COUNT(*) AS INT)
但它仍然返回一个 DOUBLE
(8 字节 float )。
注意:考虑到我使用 ODBC,我编写了很多通用的 C++ 代码来支持 LONG 的返回值,这就是 ODBC 10 年来的做法。如果可能的话,我想保持这种状态,而不必在我的应用程序中编写特定于 ORACLE 的代码。
最佳答案
聚合函数count
返回一个INTEGER
,通常称为NUMBER(38,0)
。
Oracle 数据库中的所有数值都以 Oracle NUMBER
格式存储。
Number of Bytes:
p = precision;
s = 0 for positive numbers, 1 for negative numbers;
0 and negative infinity consume 1 byte, positive infinity consumes 2 bytes;
select round((length(38)+0)/2)+1 from dual; --20 bytes
试试这个(未测试)..
select vsize(count(*)) from tablename;
select dump(count(*)) from tablename;
OCI 可以进行数据类型转换/映射 external data types .
关于c++ - Oracle 11gR1 或 R2 客户端上是否有设置可在 ODBC API 调用中将 SELECT COUNT(*) 返回的数据类型从 DOUBLE 更改为 LONG?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12285091/