oracle數據庫的clob字段導出為sql insert插入語句可以分三種情況:1,clob沒有換行符;2,clob有換行符但不以分號結尾;3,clob有換行符並且以分號結尾。
- clob沒有換行符
使用dbms_lob.substr(clobName) clobName查詢並導出即可,導入的時候oracle會自動將字符串轉換為clob類型。
示例:select id,dbms_lob.substr(single_line) single_line from demo_table;
然后使用Export query results功能導出為sql即可。 - clob有換行符但不以分號結尾
使用q’<multi_lines>’轉義符格式即可導入,常用轉義字符有[],{},<>等,也可以用#@=|
示例:insert into demo_table(id,multi_line) values(‘1’,q’<line-1
line2
line3>’)
局限,查詢結果並導出為sql,然后還需要對sql進行再次修改 - clob有換行符並且以分號結尾
使用||chr(13)||chr(10)||’statement;’格式,由於有分號結尾所以q的方式會報錯
示例:insert into demo_table(id,js_statements) values(‘2’,’function match(list){‘
||chr(13)||chr(10)||’var result=’’hello’’;’
||chr(13)||chr(10)||’return result;’
||chr(13)||chr(10)||’}’)
局限,查詢結果並導出為sql,然后還需要對sql進行再次修改,代碼如下:
LineIterator lines=FileUtils.lineIterator(sql)
String line=lines.nextLine();
boolean ignore=StringUtils.isBlank(line);//js內的空行會導致報錯,所以可忽略所有空行
if(!ignore){
if(line.indexOf(“prompt”)<2 || line.startsWith(“set”) || line.startsWith(“insert”){ //原樣輸出,結果sql需要set define off否則導入sql會提示輸入變量值 }
else if(line.startsWith(“values”){ if(!line.endsWith(“;”) line+=”’”; } //不以分號結尾時表示有換行,行尾加上單引號
else if(line.startsWith(“}‘,”)){ line=’||chr(13)||chr(10)||’’+line; } //以}’,開頭表示js內容結束
else { line=’||chr(13)||chr(10)||’’+line+”’”; } //js內容前后都用單引號
}
if(!ignore){ writer.writeln(line); } //寫入sql文件,支持PL/SQL導入