OCCI:ORA-01455: 转换列溢出整数数据类型

OCCI:ORA-01455: converting column overflows integer datatype

table:

CREATE TABLE STU(ID INT PRIMARY KEY, NAME VARCHAR2(20), AGE INT)
INSERT INTO STU VALUES(1, 'ZJW', 24)
INSERT INTO STU VALUES(2, 'YGL', 25)
INSERT INTO STU VALUES(3, 'ZLY', 24)
INSERT INTO STU VALUES(4, 'LBZ', 22)

cpp代码:

int nId;  
string strName;
int nAge;
cout << "ID\t" << "NAME\t" << "AGE" << endl;
while (rs->next() == true)
{
     // get values using the getXXX() methods of Resultset
     nId = rs->getInt(1);
     strName = rs->getString(2);
     nAge = rs->getInt(3);

     cout << nId << "\t" << strName << "\t" << nAge << endl;
}

当我使用 occi 从 oracle 查询数据时,出现以下错误: ORA-01455: 转换列溢出整数数据类型

我的系统是centos 64bit,我知道int是2147483647,oracle INTEGER是-231)到(231)-1。 那么为什么我会收到这个溢出错误? 谢谢。

如果你的系统是 64 位的并不重要。 如果您将程序编译为 32 位,那么它将 运行 作为 32 位。 getInt 函数定义为(32 位 OCCI 12):

virtual int getInt(unsigned int colIndex)=0;

C/C++ 中的整数大小可以是 2 到 8 个字节,具体取决于 CPU、OS、编译器的类型以及程序是 32 位还是 64 位-少量。如果程序是 32 位并且你得到这个错误,在你的情况下 getInt 可能使用 2 个字节作为整数。

您可以通过在 while 循环之前添加这行代码来检查程序中 int 的大小:

cout << "Int size: " << sizeof(int) << endl;

奇怪的是,ResultSetclass中好像没有getLong的功能。也许这会奏效:

unsigned long nAge=(unsigned long)rs->getNumber(3);