spool是oracle sqlplus提供的一個控制命令。可以利用spool和select語句的組合動態的生成一些sql腳本或者一些數據。
sqlplus中可以執行的語句分類大概有兩種,一種是最常見的dml,dcl,ddl。這些語句在執行以后會存放在一個sqlplus的buffer中,而且每次只會存放最近執行的一條語句,以方便再次執行。另外的一種就是稱為“命令語句”了,諸如set linesize之類的,這些語句往往是處理終端顯示格式的一些命令,調用后語句不會存放入sqlplus buffer中。
spool語句就是命令語句的其中之一。在調用spool語句后,其后的select語句所產生的所有終端顯示,包括select語句本身和一些行數信息都會寫入spool語句定義的文件中。在語句執行完后,一定要調用spool off命令,不然輸出的信息只是在數據緩存中,不會寫入文件。
1.spool的作用是什么?
spool的作用可以用一句話來描述:在sqlplus中用來保存或打印查詢結果。
2.spool在oracle 9i、10g和11g下的語法及使用示例
oracle 9i spool語法
SPO[OL] [file_name[.ext]|OFF|OUT]
oracle 10g、11g spool語法
SPO[OL] [file_name[.ext] [CRE[ATE] | REP[LACE] | APP[END]] | OFF | OUT]
oracle 9i spool的主法比較簡單,其實就相當於oracle 10g中spool的replace選項,因此本文主要介紹oracle 10g的選項。
file_name[.txt]
保存查詢結果集的的路徑和文件名,如果沒有指定后綴名,默認名一般為.lst或.lis。如果指定系統文件為/dev/null and /dev/stderr,則不會添加后綴名。
off
完成spool。
out
停止spool,並將文件輸出到終端設備上,如打印機(可能有些操作系統不支持)。“OUT = OFF + PRINT”。
我們從語法上可以看到,oracle在10g、11g中對spool增加了create、replace、append選項,
create
創建指定文件名的新文件;如指定文件存在,則報文件存在錯誤。
replace
如果指定文件存在則覆蓋替換;如指定文件不存在,則創建,replace為spool默認選項。
append
向指定文件名中追加內容;如指定文件不存在,則創建。
sqlplus spool的create、replace、append選項示例
spool spool.ora create
spool spool.ora repalce
spool spool.ora append
3.利用sqlplus spool將表導成csv文件
本sql將dba_sequence的所有數據導成csv文件。
利用spool動態生成刪除某用戶模式下面所有表的sql腳本:
例如:
set echo on --是否顯示執行的命令內容
set feedback off --是否顯示 * rows selected
set heading off --是否顯示字段的名稱
set verify off --是否顯示替代變量被替代前后的語句。fil
set trimspool off --去字段空格
set pagesize 1000 --頁面大小
set linesize 50//linesize設定盡量根據需要來設定,大了生成的文件也大
define fil= 'e:\exp.txt'
prompt *** Spooling to &fil
spool &fil
select id||','||username||','||'"'||password||'"' from myuser;
spool off;
a. 創建gen_drop_table.sql文件,包含如下語句:
set echo on --是否顯示執行的命令內容
set feedback off --是否顯示 * rows selected
set newpage none
set pagesize 5000
set linesize 500
set verify off
set pagesize 0
set term off
set trims on
set linesize 600
set heading off
set timing off
set verify off
set numwidth 38
SPOOL c:\drop_table.sql
SELECT 'DROP TABLE '|| table_name ||';' FROM user_tables;
SPOOL OFF
b. 以SCOTT用戶登錄數據庫
SQLPLUS > @ …..\gen_dorp_table.sql
c. 在c盤根目錄下會生成文件drop_table.sql文件,包含刪除所有表的語句,如下所示:
DROP TABLE DEPT;
DROP TABLE EMP;
DROP TABLE PARENT;
DROP TABLE STAT_VENDER_TEMP;
DROP TABLE TABLE_FORUM;
d. 在scott用戶下運行dorp_table.sql文件,刪除scott用戶下所有的表。
SQLPLUS > @ c:\dorp_table.sql
為了防止spool打出的文件中包含sql語句和行數這些不便的信息,可以通過set來關閉這些信息在終端上的顯示,然后再執行spool。