Oracle 解決【ORA-01704:字符串文字太長】


最近遇到了一個這樣的問題,在對Oracle數據庫插入或者更新CLOB字段的時候,直接拼接了一個INSERT INTO和UPDATE語句,類似下面這種:

Sql代碼  
INSERT INTO 表名(字段1, 字段2, CLOB字段)  VALUES ('XX', 'XXX', '內容非常多');  
UPDATE 表名 T SET T.CLOB字段名 = '內容非常多';  

 

 在執行SQL的時候報了[ORA-01704:字符串文件太長]的錯誤,如下圖所示:

以上SQL語法沒有任何問題,但是如果CLOB字段的內容非常大的時候,會導致SQL語句過長,我認可網上的這個說法:隱式轉換,oracle默認把字符串轉換成varchar2類型,而這個字符串的長度,又比4000大,所以會報ora-01704錯誤。說得通俗一點,就是兩個單引號之間的字符不能超過4000。應該不是clob存不下,而是insert語句插入的時候字符串存不下,你應該分多次插入。

遇到這個問題,可以使用PL/SQL語法,采取綁定變量的方式解決,而不是直接拼接SQL,例如:

Sql代碼  
DECLARE  
  clobValue 表名.字段名%TYPE;  
BEGIN  
  clobValue := 'XXX'; --字段內容  
  UPDATE 表名 T SET T.字段名 = clobValue WHERE 條件;  
  COMMIT;  
END;  
/  

注:END;末尾加“/”的意思是執行這段PL/SQL代碼,如果多個PL/SQL代碼需要同時執行,末尾必須加上該符號。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM