使用spool的注意事項

對於經常操作Oracle的人來說,對spool肯定不陌生。


但是裏面也有幾個小的注意事項,要多加謹慎,小心被坑了。


1、spool如果不指定文件的後綴名,則會自動產生後綴名.lst

曾經在shell腳本中,sqlplus連上去之後,spool一個文件,然後用shell去操作它,結果找不到文件,最後發現,spool出來的文件名字裏多了一個後綴.lst,被坑了,從此使用spool,我都指定後綴名,如.sql等。


2、在shell腳本中,如果spool代碼不是放在單獨的sql文件中執行的,而是直接執行的,則會生成“SQL>”開頭的語句。

例如下面的shell代碼:

#!/usr/bin/env bash

sqlplus / as sysdba << EOF
    set heading off pagesize 0 linesize 4096 echo off termout off feedback off colsep % wrap off trims on
    spool test.sql
    select 'success' from dual;
    spool off
    exit
EOF

這個代碼所輸出的test.sql則肯定會帶着“SQL>”的內容。


而如果將spool單獨放到一個sql文件去,再執行則不會有“SQL>”開頭的內容,例如:

test_spool.sql:

set heading off pagesize 0 linesize 4096 echo off termout off feedback off colsep % wrap off trims on
spool test.sql
select 'success' from dual;
spool off


test.sh:

#!/usr/bin/env bash

sqlplus / as sysdba << EOF
    @test_spool.sql
    exit
EOF

如上方式執行,則不會生成含“SQL>”的字樣內容。

如果覺得還得需要中間文件test_spool.sql的方式太麻煩,則可以使用“set SQLPROMPT --SQL>”命令,設置將要顯示的“SQL>”爲“--SQL>”,則這樣spool出來的文件可以直接執行,因爲“SQL>”已經被註釋掉了。

當然如果你不嫌麻煩,也可以對spool生成出來的文件,使用sed命令將“SQL>”所在的行過濾掉,這樣也行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章