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?
当前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外部数据类型可以进行数据类型转换/映射。
相关文章:
- DrawIndexedInstanced 具有不同的 Index Count per Instance (Directx
- SQLite3 在 c++ 中输出 SELECT 上的空列表
- 如何在 sys/select.h 中正确使用
- C++ duration_cast<>(time_point_end - tine_point_start)。count() 溢出
- 为什么 std::count 比 MSVC 编译器的普通循环慢,但与 GCC 相等?
- 获取具有字段名称的 SELECT 字段类型,并带有 MariaDB C++连接器
- std::chrono::duration::count函数的实际结果类型是什么
- 在C++中使用链表的堆栈实现中,访问结构体headNode成员count和top会导致运行时错误
- "1L << count"是什么意思?如何使用超出"unsigned long long int? "范围的语句编号打印?
- 在给定的代码中,有人可以解释一下(int i = 0; i<len; i++)count[str[i]]++的代码片段;
- UDP 套接字 select() 在某些情况下无延迟(超时)返回 1
- Count the digits
- arduino count++ 是否有限制以及如何修复它?
- Winsock2 select():同一个套接字上可能有多个事件吗?
- Winsock2 select() 返回 WSAEINVAL(错误 10022)
- 将 select() 与非基于文件描述符的输入一起使用
- Winsock2 select() 函数:传递 {0, 0} 作为超时参数
- "cout<<count<<endl;"没有打印任何内容
- Oracle 11gR1或R2客户端上是否设置了在ODBC API调用中将SELECT COUNT(*)返回的数据类型从
- 有没有办法从这个sql语句和逻辑中删除select count(*)