gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:07:37 26 4
gpt4 key购买 nike

当前使用 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:

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com