Pro*C的整数溢出测试

测试发现,Pro*C中,不管ORACLE数据库中的number字段是多大,只要字段的值大于绑定的变量所能够容纳的范围,就会出现“ORA-01455: 转换列溢出整数数据类型”。

不过,Pro*C不支持long long(64位)类型的绑定。当number字段的值大于2147483647或小于- 2147483648时,建议使用double类型来绑定,然后再将double类型转换成long long类型。

double temp;
long long value;
//…

EXEC SQL SELECT large_value INTO :temp FROM some_table; //….

value = (long long)temp;
 
还有另一种做法,不过效率没有上一种高:
#include <stdlib>
 
//….
char buf[22];
long long value;
//….

EXEC SQL SELECT large_value INTO :buf FROM some_table; //…

value = strtoll(buf, NULL, 0);    //无符号类型使用strtoull
// 注意:windows平台的函数名为_strtoi64()和_strtoiu64()
 
对应的值的范围为:
数据类型
长度(位)
数值范围
char
8
-128 至127
unsigned char
8
0至255
short
16
-32768至32767
unsigned short
16
0至65535
int
32
- 2147483648至2147483647
unsigned int
32
0 - 4294967295
long long
64
- 9223372036854775808
至9223372036854775807
unsigned long long
64
0至18446744073709551615
   供参考。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值