要开启OTL的64位长整数支持,必须先定义宏
1 #define OTL_BIGINT __int64 // VC++, Borland C++
或者
1 #define OTL_BIGINT long long // GNU C++
1 #if defined(__GNUC__) // GNU C++ 2 #include3 #define OTL_BIGINT long long 4 #define OTL_STR_TO_BIGINT(str,n) \ 5 { \ 6 n=strtoll(str,0,10); \ 7 } 8 #define OTL_BIGINT_TO_STR(n,str) \ 9 { \ 10 sprintf(str,"%lld",n); \ 11 } 12 #endif
或是(WINDOWS平台)
1 #define OTL_BIGINT __int64 2 #define OTL_STR_TO_BIGINT(str,n) \ 3 { \ 4 n=_atoi64(str); \ 5 } 6 #define OTL_BIGINT_TO_STR(n,str) \ 7 { \ 8 _i64toa(n,str,10); \ 9 } 10
原理就是通过宏把64位长整数转换成字符串存储在数据库里,取的时候再把字符串转换成64位长整数
在LP64平台上使用64位的OCI时,可以考虑定义宏
1 #define OTL_ORA_MAP_BIGINT_TO_LONG
总之,就一句话,要想开启OTL的64位长整数,则必须定义宏OTL_BIGINT,如果底层驱动是OCI11.2以前的版本或是ODBC本身不支持64位长整数(这个情况比较少见),则还需要定义宏OTL_STR_TO_BIGINT和OTL_BIGINT_TO_STR
参考资料:(要FQ才能打开,不知道为啥这个网站会被封掉)