使用ODBC API调用 Oracle Client 10g (所有版本)的当前C ++应用程序,11gR1(v11.1.0.6)返回LONG(4字节整数)
SELECT COUNT(*) from tablename
将Oracle客户端更改为11gR1(v11.1.0.7)或更高版本(11.2.x.y等),并且该语句返回DOUBLE(相当于oracle NUMBER数据类型的8字节浮点值)。
由于后端DB是相同的版本,因此必须有一个客户端设置(我推测)已更改此Aggregate SQL函数的默认行为以返回double而不是long。我希望找到这样一个设置,我可以通过ODBC API调用或Oracle客户端配置本身以编程方式设置。
我甚至尝试使用SQL CAST
将其设为INT
SELECT CAST(COUNT(*) AS INT) FROM tablename
但仍然会返回DOUBLE
(8字节浮动NUMBER)。
注意:鉴于我使用ODBC,我已经编写了许多支持返回值为LONG的通用C ++代码,因为这是通过ODBC实现10年的方式。如果可能的话,我想保持这一点,而不必在我的应用程序中编写ORACLE特定代码。
答案 0 :(得分:1)
汇总功能count
返回INTEGER
,通常称为NUMBER(38,0)
。
Oracle数据库中的所有数值都以Oracle NUMBER
格式存储。
字节数:
p =精度;
s = 0表示正数,1表示负数;
0和负无穷大消耗1个字节,正无穷大消耗2个字节;
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可以进行数据类型转换/映射。