引言
在項目中,我們經常會遇到數據的卸載、裝載需求。
卸載就是需要將數據從數據庫中導入到文本文件中的需求,這樣的方法有很多,比較常用的就是spool命令。
裝載就是需要將數據從文本文件中導入到數據庫中。方法也有很多,常用的方法為:sqlldr。關于sqlldr,詳見博客:《數據裝載--sqlldr的使用》
下面介紹下spool的使用。
一、示例:
spool:是sqlplus的命令。它允許你把一句或者多句sql語句輸出保存為文件格式。
SQL> spool d:\test1.txt
SQL> select userid,username,email from test;
SQL> spool off
查看文件test1.txt,數據導入文件成功。如果在spool后面的輸出文件名那一欄不指定路徑的話,默認在登陸用戶的home目錄下。
二、spool的語法格式:
spool { file_name[.ext] [create|replace|append]| off | out }
file_name:指定輸出的文件名。默認的文件擴展名是.lst。
create:創建一個新的文件。
replace:默認使用該項.覆蓋原有文件中的內容,如果原文件不存在則,新建一個輸出文件。
append:把輸出內容追加到指定的文件中。
off:停止輸出。
out:停止輸出,并發送到默認的打印機,該命令在有些操作系統上面不可用。
三、spool設置
示例一只是非常簡單的使用了spool命令,但是對于sql的格式和輸出文件的格式,最好自己定義好,否則出錯概率非常大。
spool常用的設置
set colsep' '; //域輸出分隔符
set echo off; //顯示start啟動的腳本中的每個sql命令,缺省為on
set feedback off; //回顯本次sql命令處理的記錄條數,缺省為on
set heading off; //輸出域標題,缺省為on
set pagesize 0; //輸出每頁行數,缺省為24,為了避免分頁,可設定為0。
set termout off; //顯示腳本中的命令的執行結果,缺省為on
set trimout on; //去除標準輸出每行的拖尾空格,缺省為off
set trimspool on; //去除重定向(spool)輸出每行的拖尾空格,缺省為off
導出文本數據的建議格式:
SQL*PLUS環境設置
SET NEWPAGE NONE
SET HEADING OFF
SET SPACE 0
SET PAGESIZE 0
SET TRIMOUT ON
SET TRIMSPOOL ON
SET LINESIZE 2500
對于字段內包含很多回車換行符的應該給與過濾,形成比較規矩的文本文件。通常情況下,我們使用如下:
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
示例一優化為:
SQL> set trimspool on
SQL> set linesize 120
SQL> set pagesize 2000
SQL> set newpage 1
SQL> set term off
SQL> spool d:\test2.txt
SQL> select userid||','||username||','||email||',,' from test;
SQL> spool off
查看test2.txt為:
SQL> select userid||','||username||','||email||',,' from test;
USERID||','||USERNAME||','||EMAIL||',,'
------------------------------------------------------------------------------------------------------------------------
a001,zhangsan,zhangsan@163.com,,
a002,lisi,lisi@163.com,,
a003,wangwu,wangwu@163.com,,
SQL> spool off