0

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 code:

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;
}

when i use occi to query data from oracle, i get this error: ORA-01455: converting column overflows integer datatype

my system is centos 64bit,and i know int is 2147483647,and oracle INTEGER is -231) to (231)-1. so why i get this overflow error? tks.

4

1 回答 1

0

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

virtual int getInt(unsigned int colIndex)=0;

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

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

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

getLong奇怪的是,课堂上似乎没有任何功能ResultSet。也许这会起作用:

unsigned long nAge=(unsigned long)rs->getNumber(3);
于 2015-11-19T22:33:16.963 回答