Oracle 11gR1或R2客户端上是否设置了在ODBC API调用中将SELECT COUNT(*)返回的数据类型从

Is there a setting on an Oracle 11gR1 or R2 Client to change the data type returned by SELECT COUNT(*) from DOUBLE to LONG in an ODBC API call?

本文关键字:COUNT SELECT 数据类型 返回 调用 API 客户端 R2 11gR1 是否 ODBC      更新时间:2023-10-16

当前C++应用程序使用ODBC API调用Oracle Client 10g(所有版本),11gR1(v11.1.0.6)为SELECT COUNT(*) from tablename

将Oracle客户端更改为11gR1(v11.1.0.7)或更高版本(11.2.x.y等),同一语句将返回一个DOUBLE(相当于Oracle NUMBER数据类型的8字节浮点值)。

由于后端数据库是同一版本,因此必须有一个客户端设置(我认为)更改了此聚合SQL函数的默认行为,以返回double而不是long。我希望找到这样一个设置,可以通过ODBC API调用以编程方式设置,也可以在Oracle客户端配置本身中设置。

我甚至尝试使用SQL CAST使其成为INT SELECT CAST(COUNT(*) AS INT) FROM tablename但是它仍然返回CCD_ 4(8字节的浮动NUMBER)。

注意:考虑到我使用ODBC,我已经编写了很多支持返回值LONG的通用C++代码,因为10年来通过ODBC就是这样。如果可能的话,我想保持这种状态,而不必在我的应用程序中编写ORACLE特定的代码。

聚合函数count返回一个INTEGER,通常称为NUMBER(38,0)。Oracle数据库中的所有数值都以Oracle NUMBER格式存储。

字节数:

圆形((长度(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外部数据类型可以进行数据类型转换/映射。