sqlplus 中的spool命令

2021-10-10 15:20:47 字數 4697 閱讀 5121

sqlplus /nolog <<- eof

set linesize 2500

set pagesize 0

set heading off

set feedback off

set echo off

set termout off

set trimout on

set trimspool on

set sqlprompt #sql>

conn security/$securitypassword@$oracle_sid

spool 2-exp.sh

@@ ./sql/2-gen_exp_security.sql

spool off

conn trade/$tradepassword@$oracle_sid

@@ ./sql/2-gen_exp_trade.sql

spool off

conn inte***ce/$inte***cepassword@$oracle_sid

@@ ./sql/2-gen_exp_inte***ce.sql

spool off

conn ulog/$ulogpassword@$oracle_sid

@@ ./sql/2-gen_exp_ulog.sql

spool off

conn clear/$clearpassword@$oracle_sid

@@ ./sql/2-gen_exp_clear.sql

spool off

conn security/$securitypassword@$oracle_sid

spool 5-imp.sh

@@ ./sql/5-gen_imp_security.sql

spool off

conn trade/$tradepassword@$oracle_sid

@@ ./sql/5-gen_imp_trade.sql

spool off

conn inte***ce/$inte***cepassword@$oracle_sid

@@ ./sql/5-gen_imp_inte***ce.sql

spool off

conn ulog/$ulogpassword@$oracle_sid

@@ ./sql/5-gen_imp_ulog.sql

spool off

conn clear/$clearpassword@$oracle_sid

@@ ./sql/5-gen_imp_clear.sql

spool off

eof

1 <<- eof eof

在shell指令碼中,通常將eof與 << 結合使用,表示後續的輸入作為子命令或子shell的輸入,直到遇到eof為止,再返回到主shell。

eof只是乙個分界符,當然也可以用abcde替換。

當shell遇到《時,它知道下乙個詞是乙個分界符。在該分界符以後的內容都被當作輸入,直到shell又看到該分界符(位於單獨的一行)。

此分界符可以是所定義的任何字串,其實,不一定要用eof,只要是「內容段」中沒有出現的字串,都可以用來替代eof,完全可以換成abcde之類的字串,只是乙個起始和結束的標誌罷了。

2 set linesize 2500

設定每行的字元輸出個數為2500,放置換行(預設為80 )

3 set pagesize 0

禁止分頁輸出

4 set heading off

禁止輸出標題(預設為on)

5 set feedback off

禁止回顯sql命令處理的記錄條數(預設為on)

6 set echo off

不顯示指令碼中的每個sql 命令(預設為on)

7 set termout off

禁止螢幕顯示指令碼中命令的執行結果(預設為on)

對實際輸出文字沒有影響

8 set trimout on

去除標準輸出每行的行尾空格(預設為off)

9 set trimspool on

去除spool 輸出結果中每行的結尾空格(預設為off)

10 set sqlprompt #sql>

去除開頭和結尾的sql查詢和結束命令

將內容附加到乙個已經存在的檔案中

12 set newpage 1

設定頁與頁之間的分隔;當值為0時在每頁開頭有乙個小的黑方框;當值為n時在頁和頁之間隔著n個空行;當為none時,會在頁和頁之間沒有任何間隔;

13 set colsep |

域輸出分隔符

14 set sqlblankline off|on

off 對sql語句中的空行不處理

on 會正確處理空行

15 col column_name format a50**

設定column_name為50個字元寬

說明: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

Sql plus技巧之SPOOL應用

1 使用sql plus動態生成批量指令碼 建立gen drop table.sql檔案,包含如下語句 set echo off 不顯示start啟動的指令碼中的每個sql set feedback off 不回顯處理記錄條數 set newpage none set linesize 2000 一...

oracle中spool的用法小結

在生產中常會遇到需要將數量比較大的錶值匯入到本地文字檔案中.方法有很多種,比較常用的就是spool命令 要輸出符合要求格式的資料檔案只需在select時用字元連線來規範格式。比如有如下表 sql select id,username,password from myuser 測試表 1 john 1...

Orcale中的spool命令使用

在對orcale資料庫檔案進行匯出時,我們希望批量處理已經寫好的sql 但是在終端正常情況下無法進行迴圈執行 sqlplus我們可以對多行 批量處理,步驟如下 1 首先你連線.s 件 sh 資料夾路徑名 s 件 待連線的資料庫 2 終端出現sql 時,說明資料庫連線成功了,此時輸入的語句為 test...