














設(shè)置set termspool off后,則輸出的內(nèi)容只會(huì)保存在輸出文件中,不會(huì)顯示在屏幕上,極大的提高了spool的速度。









下面我們使用Spool技術(shù)來(lái)導(dǎo)出一個(gè)表的數(shù)據(jù),我們要求做到:
①導(dǎo)出的過(guò)程不在SQL*PLUS屏幕上顯示
②導(dǎo)出的文本中不含有執(zhí)行的SQL命令
③導(dǎo)出的文本中不含有字段名
④導(dǎo)出的文本中使用逗號(hào)(英文)作為字段的分隔符
⑤導(dǎo)出的文本中每行長(zhǎng)200個(gè)字符
⑥導(dǎo)出的文本中每頁(yè)999行
⑦導(dǎo)出的文本中每行后面的空格必須被截取
那么下面我們來(lái)看一下應(yīng)該如何做到,首先創(chuàng)建一個(gè)用于導(dǎo)出的sql腳本文件,我們將其命名為ExpData.sql,腳本內(nèi)容如下所示:













請(qǐng)注意上面的兩個(gè)地方:set部分和spool部分,前者用于設(shè)置導(dǎo)出的文本格式,后者再次執(zhí)行一個(gè)sql腳本:get_table.sql進(jìn)行導(dǎo)出。下面我們?cè)倏戳硪粋€(gè)腳本get_table.sql:

這里我們使用了||','||來(lái)為每個(gè)導(dǎo)出字段添加分隔符:,最后是在SQL*PLUS環(huán)境下執(zhí)行上述的導(dǎo)出腳本


注意在這里我們看不到任何的輸出結(jié)果,是因?yàn)槲覀兪褂昧藄et echo off和set term off兩個(gè)選項(xiàng)的結(jié)果。在大數(shù)據(jù)量導(dǎo)出的情況下關(guān)閉屏幕的輸出非常有必要,因?yàn)檫@將大大提高程序執(zhí)行的效率,否則的話(huà)會(huì)導(dǎo)致SQL*PLUS不停地刷新屏幕和緩沖區(qū)。
其實(shí)我們也可以把上述的幾個(gè)選項(xiàng)寫(xiě)在一塊,比如說(shuō)現(xiàn)在我們要將導(dǎo)出文件改為htm文件格式,我們可以這樣寫(xiě)






這里我們使用set markup html on來(lái)將文件導(dǎo)出成為HTML格式,同時(shí)注意導(dǎo)出文件名的后綴要改為.htm。因?yàn)椴捎昧薍TML表格的形式,所以我們將第二個(gè)腳本稍微修改一下

導(dǎo)出的最終結(jié)果如下:


據(jù)庫(kù)/Oracle_spool_html.jpg)
注意在導(dǎo)出完成后SQL*PLUS的提示符變成了SQL>這是因?yàn)槲覀兇蜷_(kāi)了HTML格式的輸出所致(>),如果我們要恢復(fù)成默認(rèn)的提示符格式,只需要再次執(zhí)行一次:

-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。