簡體   English   中英

在Oracle OCCI / OCI中,讀取LOB的緩沖區應該大於實際數據嗎? 獲得ORA-32116

[英]In Oracle OCCI/OCI, should buffer for reading LOBs be larger than actual data? Getting ORA-32116

我們通過OCCI將數據從CLOB讀入std::vector 簡化代碼如下所示:

oracle::occi::Clob clob = result.getClob( 3 );
unsigned len = clob.length();
std::vector< unsigned char > result( len );
unsigned have_read = clob.read( len , result.data() , len );

這會產生錯誤ORA-32116,表示緩沖區大小(讀​​取的第三個參數)應該等於或大於要讀取的數據量(讀取的第一個參數)。 這種情況顯然是持有的。

將緩沖區大小增加到4 * len后:

unsigned have_read = clob.read(len , result.data() , 4 * len);

操作正確執行。 到目前為止, have_readlen的值總是相同的。

緩沖區是否需要未記錄的額外空間? 或者需要完整的頁面?

我們使用的是“Oracle Database 12c企業版12.1.0.2.0 - 64位”。

歡迎任何有關該主題的澄清。

我懷疑你的CLOB中有多字節字符。

根據文檔clob.length() “返回CLOB的字符數”,clob.read()buffsize參數聲明“有效值是大於或等於amt數字” ,這反過來說它是“要讀取的字節數。“

換句話說(並且根據文檔clob.read()當你期望字節數時,你將字符數傳遞給clob.read() 您收到錯誤的事實表明前者小於后者。

文檔建議將緩沖區更改為utext ,在通過setCharSetId()設置字符集后將修復它。

或者,如果你有多字節字符並且不需要做任何字符表示(不知道),那么使用BLOB代替它可能是值得的; blob.length()返回字節數

暫無
暫無

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

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