Oracle 數據導出工具 Spool

Oracle Spool


Spool,Oracle快速導出數據的工具,是sqlplus的指令,不是sql語法裏的東西
(Oracle快速導入數據的工具爲sqlldr,在博客的其他文章中講述)


一、Spool常用的設置
set arraysize 5000;  //此參數可提高SPOOL卸載的速度,最大可以設置爲5000
set autotrace on;    //設置允許對執行的sql進行分析
set colsep ',';   //域輸出分隔符
set echo off;    //顯示start啓動的腳本中的每個sql命令,缺省爲on
set feedback off;  //回顯本次sql命令處理的記錄條數,缺省爲on,設置顯示“已選擇XX行”
set heading off;   //輸出域標題,字段的名稱,缺省爲on
SET LINESIZE 2500;   //每行允許的最大字符數,設置大些,免得數據被截斷,但不宜過大,太大會大大降低導出的速度(注意必須與trimspool結合使用防止導出的文本有太多的尾部空格)
set newpage 1;       //設置頁與頁之間的分隔{1|n|NONE};當值爲0時在每頁開頭有一個小的黑方框;當值爲n時在頁和頁之間隔着n個空行;當爲none時,會在頁和頁之間沒有任何間隔;
set newp none;       //設置查詢出來的數據分多少頁顯示,如果需要連續的數據,中間不要出現空行就把newp設置爲none,這樣輸出的數據行都是連續的,中間沒有空行之類的
set num 18;          //設置數字的長度,如果不夠大,則用科學記數法顯示
set numwidth 12;    //輸出number類型域長度,缺省爲10
SET NULL text;       //顯示時,用text值代替NULL值
set pagesize 2000;  //輸出每頁行數,頁面大小,缺省爲24,爲了避免分頁,可設定爲0
set serveroutput on; //設置允許顯示輸出類似dbms_output;--編寫存儲過程時,大多會將必要的信息輸出;
SET SPACE 0;
set term off;        //不在屏幕上輸出執行結果
set termout off;   //顯示腳本中的命令的執行結果,缺省爲on
set timing on;       //顯示每個sql語句花費的執行時間,設置顯示“已用時間:XXXX”
set trimout on;   //去除標準輸出每行的拖尾空格,缺省爲off
set trimspool on;  //去除重定向(spool)輸出每行的拖尾空格,缺省爲off
set verify off       //是否顯示替代變量被替代前後的語句
SET wrap on;         //輸出行長度大於設置行長度時(用set linesize n命令設置);值爲on時,多餘的字符另起一行顯示,否則多餘的字符將被切除,不予顯示;




二、Spool 使用方法
說明:spool不但可以把數據導出到txt,也可以導出到csv等;不但可以導數據,也可以導出字符,拼裝成sql文件等
1.採用設置分隔符的方法
說明:設定分隔符後,由sqlplus自己使用設定的分隔符對字段進行分割,這種方法不怎麼用,在此不詳述。
set colsep '|' --設置|爲列分隔符   
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 e:\temp.txt
select * from tablename;   
spool off


2.採用分隔符並接,手工控制輸出格式
說明:最佳方法,該方法可以運用各種oracle函數處理導入時的字符。
set trimspool on
set linesize 120
set pagesize 2000
set newpage 1
set heading off
set term OFF
spool e:\fs_temp_tb_cm_serv_20120703.txt
select '地市,縣區,用戶,時間,流量,費用' form dual;
SELECT a_name||','||replace(replace(replace(b_name,chr(9)),chr(10)),chr(13))||','||replace(c_name,'\"')||','||to_char(create_time,'yyyy-mm-dd hh24:mi:ss')||','||net_flux||','||all_fee FROM temp_ltao10;
spool off


上面from dual語句會被當做表頭字段先導出排在第一行
(SPOOL OUT比SPOOL OFF多了一個把文件發送到標準打印輸出的動作。記得ItPub論壇上有位大蝦總結得更簡練“OUT = OFF + PRINT”。)
10g以前的版本,spool會將文件覆蓋,10g後,爲追加。


3.spool不但可以導出數據,也可以生成sql文件
spool c:\table.sql;   
select 'insert into changetable values('|| id||',',changedate||',',areaid||',',workunit||',',dept||',',post||',',address||',',zip||',',note||',',city||',',province||',',country||',',status||',',lawpeopleid||',',reason||',',feedback||');' from change where lawpeopleid not in (select id from LAWPEOPLE t );  
spool off
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章