簡體   English   中英

導致ORA-01406的Oracle OCCI setDataBuffer:提取的列值被截斷

[英]Oracle OCCI setDataBuffer causing ORA-01406: fetched column value was truncated

我正在使用setDataBuffer通過游標檢索從存儲過程返回的行,因為在這種情況下setPrefetchRowCount似乎不起作用。 當緩沖區大於返回的行總數時,使用setDataBuffer效果很好。 在我的情況下,我測試了緩沖區可以容納5000行,返回的行數為538。當我將緩沖區減小到100的長度(max_numrows = 100以下)時,它將對next(max_numrows)進行前三個調用,並給出與緩沖區較大時的結果相同。 但是,在第四次調用時,出現異常ORA-01406:提取的列值被截斷了。 怎么回事,如何解決該問題?

static const size_t max_numrows=5000;
char var_buf[max_numrows][7];
char sym_buf[max_numrows][9];
rs->setDataBuffer(1,var_buf,oracle::occi::OCCI_SQLT_STR,sizeof(var_buf[0]),(ub2*)0);
rs->setDataBuffer(2,sym_buf,oracle::occi::OCCI_SQLT_STR,sizeof(sym_buf[0]),(ub2*)0);
sym.resize(var.size());
size_t fetch_count=0;
while(rs->next(max_numrows)==ResultSet::DATA_AVAILABLE)
{
    for(size_t i=0;i<rs->getNumArrayRows();++i)
    {
        var[fetch_count*max_numrows+i]=var_buf[i];
        sym[fetch_count*max_numrows+i]=sym_buf[i];
    }
    ++fetch_count;
}

數據庫

在此處輸入圖片說明

這與行無關,而與列寬有關。 從數據庫中獲取的某些值分別超過7。 9個字節。

暫無
暫無

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

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