簡體   English   中英

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

[英]OCCI:ORA-01455: converting column overflows integer datatype

表:

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 64位,我知道int是2147483647,而oracle INTEGER是-2 31)至(2 31)-1。 那為什么我會得到這個溢出錯誤? tks。

您的系統是否為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;

奇怪的是,在ResultSet類中似乎沒有函數getLong 也許這可以工作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM