Oracle數據庫clob字段導出為sql insert插入語句


oracle數據庫的clob字段導出為sql insert插入語句可以分三種情況:1,clob沒有換行符;2,clob有換行符但不以分號結尾;3,clob有換行符並且以分號結尾。


  1. clob沒有換行符
    使用dbms_lob.substr(clobName) clobName查詢並導出即可,導入的時候oracle會自動將字符串轉換為clob類型。
    示例:select id,dbms_lob.substr(single_line) single_line from demo_table;
    然后使用Export query results功能導出為sql即可。

  2. clob有換行符但不以分號結尾
    使用q’<multi_lines>’轉義符格式即可導入,常用轉義字符有[],{},<>等,也可以用#@=|
    示例:insert into demo_table(id,multi_line) values(‘1’,q’<line-1
    line2
    line3>’)
    局限,查詢結果並導出為sql,然后還需要對sql進行再次修改

  3. 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導入


免責聲明!

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



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