乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      oracle spool 用法及執(zhí)行.sql文件

       安素暖 2019-06-27

      spool用法:

      在PL/SQL developer 里面打開COMMAND Windown(命令窗口):

      SQL> spool d:\1.txt
      Started spooling to d:\1.txt

      SQL>(輸入查詢SQL)

      SQL>spool off
      Stopped spooling to d:\1.txt

      就可以在d盤找到文件1.txt,文件里有查詢SQL所查詢的數(shù)據(jù)了。

      執(zhí)行SQL文件:

      SQL>start d:\1.sql

      就可以運(yùn)行1.sql文件中的語句了。


      關(guān)于SPOOL(SPOOL是SQLPLUS的命令,不是SQL語法里面的東西。) 

      對(duì)于SPOOL數(shù)據(jù)的SQL,最好要自己定義格式,以方便程序直接導(dǎo)入,SQL語句如: 
      select taskindex||'|'||commonindex||'|'||tasktype||'|'||to_number(to_char(sysdate,'YYYYMMDD')) from ssrv_sendsms_task; 

      spool常用的設(shè)置 
      set colsep' ';    //域輸出分隔符 
      set echo off;    //顯示start啟動(dòng)的腳本中的每個(gè)sql命令,缺省為on 
      set feedback off;  //回顯本次sql命令處理的記錄條數(shù),缺省為on 
      set heading off;   //輸出域標(biāo)題,缺省為on 
      set pagesize 0;   //輸出每頁行數(shù),缺省為24,為了避免分頁,可設(shè)定為0。 
      set termout off;   //顯示腳本中的命令的執(zhí)行結(jié)果,缺省為on 
      set trimout on;   //去除標(biāo)準(zhǔn)輸出每行的拖尾空格,缺省為off 
      set trimspool on;  //去除重定向(spool)輸出每行的拖尾空格,缺省為off 

      導(dǎo)出文本數(shù)據(jù)的建議格式: 
      SQL*PLUS環(huán)境設(shè)置SET NEWPAGE NONE 
                      SET HEADING OFF 
                      SET SPACE 0 
                      SET PAGESIZE 0 
                      SET TRIMOUT ON 
                      SET TRIMSPOOL ON 
                      SET LINESIZE 2500 

      注:LINESIZE要稍微設(shè)置大些,免得數(shù)據(jù)被截?cái)?,它?yīng)和相應(yīng)的TRIMSPOOL結(jié)合使用防止導(dǎo)出的文本有太多的尾部空格。但是如果LINESIZE設(shè)置太大,會(huì)大大降低導(dǎo)出的速度,另外在WINDOWS下導(dǎo)出最好不要用PLSQL導(dǎo)出,速度比較慢,直接用COMMEND下的SQLPLUS命令最小化窗口執(zhí)行。 

      對(duì)于字段內(nèi)包含很多回車換行符的應(yīng)該給與過濾,形成比較規(guī)矩的文本文件。通常情況下,我們使用SPOOL方法,將數(shù)據(jù)庫中的表導(dǎo)出為文本文件的時(shí)候會(huì)采用兩種方法,如下述: 

      方法一:采用以下格式腳本  
              set colsep '|'               --設(shè)置|為列分隔符 
        set trimspool on 
        set linesize 120 
        set pagesize 2000          
        set newpage 1 
        set heading off            
        set term off 
              set num 18                  
              set feedback off            
        spool 路徑+文件名 
        select * from tablename; 
        spool off 

      方法二:采用以下腳本 
              set trimspool on 
        set linesize 120 
        set pagesize 2000 
        set newpage 1 
        set heading off 
        set term off 
        spool 路徑+文件名 
        select col1||','||col2||','||col3||','||col4||'..' from tablename; 
        spool off 

      比較以上方法,即方法一采用設(shè)定分隔符然后由sqlplus自己使用設(shè)定的分隔符對(duì)字段進(jìn)行分割,方法二將分隔符拼接在SELECT語句中,即手工控制輸出格式。 

      在實(shí)踐中,發(fā)現(xiàn)通過方法一導(dǎo)出來的數(shù)據(jù)具有很大的不確定性,這種方法導(dǎo)出來的數(shù)據(jù)再由sqlldr導(dǎo)入的時(shí)候出錯(cuò)的可能性在95%以上,尤其對(duì)大批量的數(shù)據(jù)表,如100萬條記錄的表更是如此,而且導(dǎo)出的數(shù)據(jù)文件狂大。 

      而方法二導(dǎo)出的數(shù)據(jù)文件格式很規(guī)整,數(shù)據(jù)文件的大小可能是方法一的1/4左右。經(jīng)這種方法導(dǎo)出來的數(shù)據(jù)文件再由sqlldr導(dǎo)入時(shí),出錯(cuò)的可能性很小,基本都可以導(dǎo)入成功。 

      因此,實(shí)踐中我建議大家使用方法二手工去控制spool文件的格式,這樣可以減小出錯(cuò)的可能性,避免走很多彎路。 


      自測(cè)例:將ssrv_sendsms_task表中的數(shù)據(jù)導(dǎo)出到文本(數(shù)據(jù)庫Oracle 9i  操作系統(tǒng) SUSE LINUX Enterprise Server 9) 

      spool_test.sh腳本如下: 
      #!/bin/sh 
      DB_USER=zxdbm_ismp                               #DB USER 
      DB_PWD=zxin_smap                                 #DB PASSWORD 
      DB_SERV=zx10_40_43_133                           #DB SERVICE NAME 

      sqlplus -s $DB_USER/$DB_PWD@$DB_SERV<<EOF # -s 參數(shù)屏蔽打印到屏幕上的其他信息,只顯示sql執(zhí)行后從DB中查詢出來的信息,過濾掉spool函數(shù)執(zhí)行時(shí)在文件中寫入的其他信息。 
      set trimspool on 
      set linesize 120 
      set pagesize 2000 
      set newpage 1 
      set heading off 
      set term off 
      spool promt.txt 
      select taskindex||'|'||commonindex||'|'||tasktype||'|'||to_number(to_char(sysdate,'YYYYMMDD')) from ssrv_sendsms_task; 
      spool off 
      EOF 


      執(zhí)行./spool_test.sh后生成sp_test.txt,內(nèi)容如下: 
      83|115|1|20080307 
      85|115|11|20080307 
      86|115|10|20080307 
      84|115|2|20080307 
      6|5|14|20080307 
      7|5|12|20080307 
      9|5|15|20080307 


      注:上面自測(cè)例中,spool promt.txt中的目標(biāo)生成文件promt.txt,在HP-UNX環(huán)境下的shell腳本中調(diào)用Oracle的spool函數(shù),如果將上述邏輯代碼封裝為一個(gè)function,然后來調(diào)用這個(gè)function的話,則在shell腳本中最終是不會(huì)生成promt.txt文件的。只能直接執(zhí)行邏輯代碼,封裝后則spool函數(shù)失效。 
                對(duì)于promt.txt在相對(duì)路徑下,下面2中方法在shell環(huán)境中執(zhí)行時(shí),兩者只能擇一,兩者并存則spool函數(shù)會(huì)失效。假設(shè)promt.txt文件生成的路徑為:/home/zxin10/zhuo/batchoperate/spoolfile 
      方式[1] 
      echo "start spool in shell.." 

      sqlplus -s zxdbm_ismp/zxin_smap<<EOF 
      set pagesize 0 
      set echo off feed off term off heading off trims off 
      set colsep '|' 
      set trimspool on 
      set linesize 10000 
      set trimspool on 
      set linesize 120 
      set newpage 1 
      spool /home/zxin10/zhuo/batchoperate/spoolfile/promt.txt 
      select batchindex||'|'||productid||'|'||contentid||'|'||optype||'|'||uploadfile from zxdbm_700.s700_batch_operation where status=1; 
      spool off 
      EOF 
      echo "end.." 
      方式[2] 
      echo "start spool in shell.." 
      cd /home/zxin10/zhuo/batchoperate/spoolfile 
      sqlplus -s zxdbm_ismp/zxin_smap<<EOF 
      set pagesize 0 
      set echo off feed off term off heading off trims off 
      set colsep '|' 
      set trimspool on 
      set linesize 10000 
      set trimspool on 
      set linesize 120 
      set newpage 1 
      spool promt.txt 
      select batchindex||'|'||productid||'|'||contentid||'|'||optype||'|'||uploadfile from zxdbm_700.s700_batch_operation where status=1; 
      spool off 
      EOF 
      echo "end.." 

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多