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

时间:2015-09-24 11:56:22

标签: c++ oracle occi

表:

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:转换列溢出整数数据类型

我的系统是64位,我知道int是2147483647,而oracle INTEGER是-2 31)到(2 31)-1。 为什么我得到这个溢出错误? TKS。

1 个答案:

答案 0 :(得分:0)

如果您的系统是64位,则无关紧要。 如果您将程序编译为32位,那么它将以32位运行。 getInt函数定义为(32位OCCI 12):

virtual int getInt(unsigned int colIndex)=0;

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

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

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

奇怪的是,似乎getLong类中没有函数ResultSet。也许这会奏效:

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