1. 程式人生 > >在資料庫中批量執行SQL並將結果記錄到檔案中

在資料庫中批量執行SQL並將結果記錄到檔案中

         專案中有一個步驟:資料移植。資料移植要遷移很多的表,遷移完之後我們要看一下我們遷移的表的記錄數對不對。假如說有一百多張表,不可能每次都一張表一張表的去查詢然後記錄,這時候就得有一個指令碼可以自動執行。我在資料視覺化工具上怎麼試都不行,同時執行一百多個查詢語句,資料視覺化工具上會產生一百多個視窗,沒有什麼用。

          最後是在sqlplus中實現的可批量查詢的指令碼(用專案資料庫的sqlplus來執行下面的命令),雖然格式不怎麼好看,不管是調整select語句的格式,還是執行後對結果檔案做修改,但最重要的是已經實現批量執行。

               基本格式   

sqlplus -s $SQL_PWD <<end_of
spool 1.txt
   select語句1 
   select語句2 
spool off
end_of
             例子
sqlplus -s $SQL_PWD <<end_of
spool 1.txt
select count(*)||'t_pub_hlp'  as res  from t_pub_hlp;
select count(*)||'t_pub_msg'  as res  from t_pub_msg;
select 'T_ACM_ACBL : '||count(*) from  T_ACM_ACBL;
spool off
end_of

結果


這是最簡單的spool命令,記得spool只能在sqlplus中使用。同時如果想要進一步學習spool,讓它按你的想法去輸出資料,可以看下我之前看過的關於spool的文章

http://blog.csdn.net/wise_man/article/details/5292656

===============

把下面的語句放到test.sql裡面,然後執行start test.sql或者 @test.sql 可以得到僅有資料的記錄檔案

  set echo off;     
    set feedback off;
    set trimspool off;
    set heading off;
    set pagesize 0; 
    set term off;
    set timing off;
    set termout off;
set verify off;
  spool 2.txt;
  select 't_pub_hlp '||count(*)  as res from t_pub_hlp;
    select 't_pub_msg '||count(*)  as res from t_pub_msg;
  spool off 


spool 參考文章