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
   供参考。

你可能感兴趣的:(oracle,sql,C++,c,C#)