最近遇到了一個這樣的問題,在對Oracle數據庫插入或者更新CLOB字段的時候,直接拼接了一個INSERT INTO和UPDATE語句,相似下面這種:數據庫
INSERT INTO 表名(字段1, 字段2, CLOB字段) VALUES ('XX', 'XXX', '內容很是多'); UPDATE 表名 T SET T.CLOB字段名 = '內容很是多';
在執行SQL的時候報了[ORA-01704:字符串文件太長]的錯誤,以下圖所示:oracle
以上SQL語法沒有任何問題,可是若是CLOB字段的內容很是大的時候,會致使SQL語句過長,我承認網上的這個說法:隱式轉換,oracle默認把字符串轉換成varchar2類型,而這個字符串的長度,又比4000大,因此會報ora-01704錯誤。說得通俗一點,就是兩個單引號之間的字符不能超過4000。應該不是clob存不下,而是insert語句插入的時候字符串存不下,你應該分屢次插入。spa
遇到這個問題,能夠使用PL/SQL語法,採起綁定變量的方式解決,而不是直接拼接SQL,例如:code
DECLARE clobValue 表名.字段名%TYPE; BEGIN clobValue := 'XXX'; --字段內容 UPDATE 表名 T SET T.字段名 = clobValue WHERE 條件; COMMIT; END; /
注:END;末尾加「/」的意思是執行這段PL/SQL代碼,若是多個PL/SQL代碼須要同時執行,末尾必須加上該符號。blog