2015-01-10 40 views
0

我正在使用N函數來更新SQL查詢中的NClob。但是,使用N函數的更新不允許我更新超過1900個字符。刪除N功能後。我能夠將超過1900個字符更新到我的NClob專欄。使用N更新NClob函數問題

任何人都可以幫助我爲什麼我不能使用N函數更新NClob列嗎?它有什麼限制嗎?

代碼是

StringBuilder的updateQuery =新的StringBuilder( 「更新TABLE_NAME組列名=」); updateQuery.append(「= N'」)。append(NClobContent).append(「'」)。append(「,」); ps.execute(updateQuery.toString());

+0

請顯示驗證碼和錯誤。 – OldProgrammer

+0

它是一個簡單的更新語句如下 - 更新table_name設置column_name = N'String的長度超過4000個字符'其中rowid = 12345 我得到的錯誤是「字符串文字太長」 – user1661892

+0

請編輯您的問題,並在那裏發佈代碼,而不是評論,並顯示調用此代碼。 – OldProgrammer

回答

0

如上所述in the documentation

  • 文本文字可以具有4000個字節的最大長度。

N個裝置被使用國家字符集,這將是UTF8或AL16UTF16(後者默認情況下),所以即使你的長串具有更少然後4000個字符,它能字面仍有4000 字節

如果沒有N字符串在數據庫字符集中解釋,然後文字將被轉換爲國家字符集,因爲它存儲在NCLOB中。因此,您可能會有更長的字符串 - 如果您的數據庫字符集是單字節,那麼您最多可以使用4000個字符,但您的NClobCOntent變量中的任何多字節字符都會被損壞。

不是使用N語法,而是將您的變量傳遞給數據庫as a stream;你可能會發現this answer是一個有用的起點。或者您可能可以使用this approach,具體取決於字符串的長度。

+0

當我使用cstmt.setCharacterStream()時,後端函數(它正在接收一個NCLOB)不能保存unicode字符。完成這些工作的目的是在NCLOB中存儲unicode字符(如日文或俄文字符)並使用流,我無法將其傳遞到後端。 – user1661892