【解決方案】Oracle插入/更新CLOB欄位報ORA-01704:字串文字太長

lhrbest發表於2018-05-18
【解決方案】Oracle插入/更新CLOB欄位報ORA-01704:字串文字太長



解決辦法:

 1、如果插入的SQL比較少,那麼可以人工處理。方法是使用PLSQL Developer軟體,命令為:select * from 表名 for update。這樣把相關的欄位內容直接複製到CLOB欄位中,最後提交即可。
2、如果插入的SQL比較多,那麼需要先把所有的SQL語句插入到表中,然後對SQL語句進行處理。要找規律,找到規律,然後用PL/SQL塊進行插入或更新即可。


DECLARE  
  v_clobValue CLOB:= 'XXX'; --欄位內容,但是單引號中的內容不能超過4000字元  
BEGIN  
  UPDATE 表名 T SET T.欄位名 = T.欄位名|| v_clobValue WHERE 條件;  
  COMMIT;  
END;  
/  



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

  1. INSERT INTO 表名(欄位1, 欄位2, CLOB欄位)  VALUES ('XX''XXX''內容非常多');  
  2. UPDATE 表名 T SET T.CLOB欄位名 = '內容非常多';  

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

以上SQL語法沒有任何問題,但是如果CLOB欄位的內容非常大的時候,會導致SQL語句過長,我認可網上的這個說法:隱式轉換,oracle預設把字串轉換成varchar2型別,而這個字串的長度,又比4000大,所以會報ora-01704錯誤。說得通俗一點,就是兩個單引號之間的字元不能超過4000。

遇到這個問題,可以使用PL/SQL語法,採取繫結變數的方式依次拼裝更新,而不是直接拼接SQL,例如:


  1. DECLARE  
  2.   v_clobValue CLOB:= 'XXX'--欄位內容,但是單引號中的內容不能超過4000字元  
  3. BEGIN  
  4.   UPDATE 表名 T SET T.欄位名 = T.欄位名|| v_clobValue WHERE 條件;  
  5.   COMMIT;  
  6. END;  
  7. /  
注:END;末尾加“/”的意思是執行這段PL/SQL程式碼,如果多個PL/SQL程式碼需要同時執行,末尾必須加上該符號。






About Me

.............................................................................................................................................

● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除

● 本文在itpub(http://blog.itpub.net/26736162/abstract/1/)、部落格園(http://www.cnblogs.com/lhrbest)和個人微信公眾號(xiaomaimiaolhr)上有同步更新

● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/

● 本文部落格園地址:http://www.cnblogs.com/lhrbest

● 本文pdf版、個人簡介及小麥苗雲盤地址:http://blog.itpub.net/26736162/viewspace-1624453/

● 資料庫筆試面試題庫及解答:http://blog.itpub.net/26736162/viewspace-2134706/

● DBA寶典今日頭條號地址:http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

.............................................................................................................................................

● QQ群號:230161599(滿)、618766405

● 微信群:可加我微信,我拉大家進群,非誠勿擾

● 聯絡我請加QQ好友646634621,註明新增緣由

● 於 2018-05-01 06:00 ~ 2018-05-31 24:00 在魔都完成

● 最新修改時間:2018-05-01 06:00 ~ 2018-05-31 24:00

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

.............................................................................................................................................

小麥苗的微店https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麥苗出版的資料庫類叢書http://blog.itpub.net/26736162/viewspace-2142121/

小麥苗OCP、OCM、高可用網路班http://blog.itpub.net/26736162/viewspace-2148098/

.............................................................................................................................................

使用微信客戶端掃描下面的二維碼來關注小麥苗的微信公眾號(xiaomaimiaolhr)及QQ群(DBA寶典),學習最實用的資料庫技術。

小麥苗的微信公眾號小麥苗的DBA寶典QQ群2《DBA筆試面寶典》讀者群小麥苗的微店

   小麥苗的微信公眾號      小麥苗的DBA寶典QQ群2     《DBA筆試面試寶典》讀者群       小麥苗的微店

.............................................................................................................................................

【解決方案】Oracle插入/更新CLOB欄位報ORA-01704:字串文字太長
DBA筆試面試講解群
《DBA寶典》讀者群 歡迎與我聯絡



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2154662/,如需轉載,請註明出處,否則將追究法律責任。

相關文章