【解決方案】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語句,類似下面這種:
- 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。
遇到這個問題,可以使用PL/SQL語法,採取繫結變數的方式依次拼裝更新,而不是直接拼接SQL,例如:
- DECLARE
- v_clobValue CLOB:= 'XXX'; --欄位內容,但是單引號中的內容不能超過4000字元
- BEGIN
- UPDATE 表名 T SET T.欄位名 = T.欄位名|| v_clobValue WHERE 條件;
- COMMIT;
- END;
- /
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寶典今日頭條號地址:
.............................................................................................................................................
● 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
● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解
● 版權所有,歡迎分享本文,轉載請保留出處
.............................................................................................................................................
● 小麥苗的微店:
● 小麥苗出版的資料庫類叢書:http://blog.itpub.net/26736162/viewspace-2142121/
● 小麥苗OCP、OCM、高可用網路班:http://blog.itpub.net/26736162/viewspace-2148098/
.............................................................................................................................................
使用微信客戶端掃描下面的二維碼來關注小麥苗的微信公眾號(xiaomaimiaolhr)及QQ群(DBA寶典),學習最實用的資料庫技術。
小麥苗的微信公眾號 小麥苗的DBA寶典QQ群2 《DBA筆試面試寶典》讀者群 小麥苗的微店
.............................................................................................................................................
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2154662/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PL/SQL 插入clob欄位處理SQL
- 表存在Clob、Blob欄位,dblink報錯的解決辦法
- oracle clob欄位去除html標籤OracleHTML
- clob 欄位查詢
- 換ojdbc14.jar驅動後clob欄位後臺報異常的解決JDBCJAR
- OGG複製同步,提示欄位長度不夠ORA-01704
- 多欄位登入通用解決方案
- JDBC處理包含CLOB欄位JDBC
- BLOB及CLOB欄位處理
- Oracle varchar2型別欄位插入插入過長資料丟失問題Oracle型別
- 利用PLSQL包載入CLOB欄位SQL
- 如何在Clob欄位中查詢
- 往資料型別為clob的表列直接insert或update長度大於4000會報字串太長錯誤資料型別字串
- ORA-01704: string literal too long 與CLOB
- LONG欄位型別向CLOB遷移型別
- clob欄位對於parallel ddl的限制Parallel
- clob欄位對於parallel dml的限制Parallel
- echarts圖表X軸文字過長解決解決方案:根據文字長度自動旋轉Echarts
- 觸發器—一個表插入資料時其他欄位同步自增長欄位觸發器
- Oracle update set欄位=nvl(n,0)還報《ORA-01407:無法更新欄位為NULL》原因分析和解決OracleNull
- oracle goldengate實現欄位插入時間值OracleGo
- asp.net 向Oracle資料庫表的Clob欄位中寫入文字編輯器中輸入的大段文字資訊ASP.NETOracle資料庫
- oracle 修改表欄位的長度Oracle
- mPDF:當表格中的字串太長時,文字字型變小字串
- mybatis update並非所有欄位需要更新的解決辦法MyBatis
- Oracle 11g 向表中大欄位插入資料Oracle
- SQL Server中text型別匯入oracle clob欄位時的設定SQLServer型別Oracle
- Oracle 修改欄位型別和長度Oracle型別
- oracle 時間欄位自動更新問題Oracle
- oracle:聯表更新多個欄位的值Oracle
- 未解決:長字串含…字串
- [20130301]clob欄位的empty_clob與NULL.txtNull
- CSS小問題與解決方案記錄(長期更新)CSS
- 簡單介紹2種Java讀取Oracle大欄位資料(CLOB)的方法JavaOracle
- 小程式中富文字解決方案
- CentOS 6安裝Oracle報錯解決方案CentOSOracle
- 【Mongo】mongo更新欄位為另一欄位的值Go
- mysql 插入中文亂碼解決方案 轉MySql