测试发现,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
|
供参考。