2010年2月11日 星期四

SPOOL小技巧--砍掉欄位跟完成的提示訊息

工作上常透過SPOOL指令產出SQL指令批次檔,但如果只是簡單的將SPOOL ON/OFF的指令開關話,輸出的指令通常會有你不想要的額外訊息;舉例來說,

SPOOL D:\Autojob\Restore\ALTER.TXT;
select 'ALTER SYSTEM KILL SESSION' || ' ''' || sid || ',' || serial# || ''';' from v$session where username='SCHEMA_USER';
SPOOL OFF;
@D:\Autojob\Restore\ALTER.TXT;
exit;

ALERT.TXT通常會長成這樣:

'ALTERSYSTEMKILLSESSION'||''''||SID||','||SERIAL#||''';'
--------------------------------------------------------------------------------
ALTER SYSTEM KILL SESSION '521,415';
ALTER SYSTEM KILL SESSION '522,2428';
ALTER SYSTEM KILL SESSION '529,4564';
ALTER SYSTEM KILL SESSION '531,8493';
ALTER SYSTEM KILL SESSION '534,8057';
ALTER SYSTEM KILL SESSION '545,3068';
ALTER SYSTEM KILL SESSION '550,2691';

已選取 7 個資料列.

檔案內容裡我們就只要中間的 alter 指令,但檔案頭尾的訊息卻最好給我眼不見為淨。要避免產出頭尾的訊息,再另外加上 SET HEADING OFF 以及 SET FEED OFF 兩個指令即可:

SPOOL D:\Autojob\Restore\ALTER.TXT;
SET HEADING OFF;
SET FEED OFF;
SELECT 'ALTER SYSTEM KILL SESSION' || ' ''' || sid || ',' || serial# || ''';' from v$session where username='SCHEMA_USER';
SPOOL OFF;
@D:\Autojob\Restore\ALTER.TXT;
exit;

產出的結果就會得到漂亮的純指令內容了:

ALTER SYSTEM KILL SESSION '521,415';
ALTER SYSTEM KILL SESSION '522,2428';
ALTER SYSTEM KILL SESSION '529,4564';
ALTER SYSTEM KILL SESSION '531,8493';
ALTER SYSTEM KILL SESSION '534,8057';
ALTER SYSTEM KILL SESSION '545,3068';
ALTER SYSTEM KILL SESSION '550,2691';

沒有留言:

張貼留言