2015-01-14 37 views
1

我試圖使用JDBC將CLOB數據發送到存儲過程。我正在使用oracle數據庫11g和ojdbc6.jar作爲驅動程序。我無法發送數據,因爲它大於32kb。我曾嘗試過各種方式來發送數據:使用JDBC將clob數據傳遞到oracle存儲過程時出錯ORA-22828

  1. 使用Clob對象
  2. 使用characterStream

這一切對我來說沒有工作。 我得到了以下錯誤: ORA-22828:輸入模式或更換參數超過32K大小限制

有一些方法使用JDBC(Java)來傳遞大數據到Oracle存儲的過程,其可以擴展到1MB。使用 代碼如下:

CallableStatement cstmt = null; 

String formedStr = "{CALL MAIL_PROC(?)}"; 
//Preparing statement 
cstmt = con.prepareCall(formedStr); 
cstmt.setCharacterStream(1, new StringReader(info.getContent()), info.getContent().length()); 
cstmt.execute(); 
+0

CLOB最多可以有2,147,483,647個字符,給你的錯誤,指出「32K大小限制」 - 談談你的DBA和問該表被重新設計並且長度限制增加。或截斷你的數據。 – Dave

+2

請顯示您的代碼,表格架構等。 – OldProgrammer

+0

我根本沒有將數據插入表中。我只是將數據傳遞給只有一個CLOB類型的輸入變量的存儲過程。 – john0609

回答

1

有與我通過在爲CLOB String對象的問題。它有一個下一行(\ r \ n)。當我刪除它時,通話進行得很順利。 我已經使用了三種類型的呼叫通過CLOB對象和所有正在做工精細:

CallableStatement cstmt = null; 

String formedStr = "{CALL MAIL_PROC(?)}"; 

cstmt = con.prepareCall(formedStr); 

//Option 1: 
cstmt.setCharacterStream(1, new StringReader(info.getContent()), info.getContent().length()); 

//Option 2: 
cstmt.setString(1, info.getContent()); 

//Option 3: 
Clob stmtClob = con.createClob(); 
stmtClon.setString(1,info.getContent()) 
cstmt.setClob(1,stmtClob); 

cstmt.execute(); 
相關問題