2015-09-24 53 views
0

表:OCCI:ORA-01455:轉換列溢出整數數據類型

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:轉換列溢出integer數據類型

我的系統是centos 64位,我知道int是2147483647,而oracle INTEGER是-2 31)到(2 31)-1。 那麼爲什麼我得到這個溢出錯誤? tks。

回答

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位,你會得到這個錯誤。

您可以通過前加入這行代碼,而循環檢查INT的程序大小:

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

奇怪的是,似乎有在ResultSet類無功能getLong。也許這將工作:

unsigned long nAge=(unsigned long)rs->getNumber(3); 
相關問題