在Oracle API调用中,Oracle 11gR1或R2客户端是否有设置将SELECT COUNT(*)返回的数据类型从DOUBLE更改为LONG?

时间:2012-09-05 15:41:44

标签: c++ oracle count odbc

使用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特定代码。

1 个答案:

答案 0 :(得分:1)

汇总功能count返回INTEGER,通常称为NUMBER(38,0)。 Oracle数据库中的所有数值都以Oracle NUMBER格式存储。

  

字节数:

     

round((length(p)+s)/2)+1

     

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可以进行数据类型转换/映射。