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

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


  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導入
相關文章
相關標籤/搜索