posts - 262,  comments - 221,  trackbacks - 0
          【5】設(shè)置輸出內(nèi)容的相關(guān)命令
          1. 將顯示的內(nèi)容輸出到指定文件 
          SQL
          > SPOOL file_name 
          在屏幕上的所有內(nèi)容都包含在該文件中,包括你輸入的sql語句。 

          2. 關(guān)閉spool輸出 
          SQL
          > SPOOL OFF 
          只有關(guān)閉spool輸出,才會在輸出文件中看到輸出的內(nèi)容。 
          備注:在實用SPOOL輸出內(nèi)容到本地文件時,需注意編碼格式,否則會出現(xiàn)亂碼的問題

          3
          .是否顯示用DBMS_OUTPUT.PUT_LINE包進(jìn)行輸出的信息 
          SQL
          > SET SERVEROUT[PUT] {ON|OFF

          4
          .是否在屏幕上顯示輸出的內(nèi)容,主要用與SPOOL結(jié)合使用。 
          SQL
          > SET TERM[OUT] {ON|OFF

          用spool命令將一個大表中的內(nèi)容輸出到一個文件中時,將內(nèi)容輸出在屏幕上會耗費大量的時間。
            設(shè)置set termspool off后,則輸出的內(nèi)容只會保存在輸出文件中,不會顯示在屏幕上,極大的提高了spool的速度。 

          備注:和Set serveroutput on不同, 這個命令用于設(shè)置SQL執(zhí)行結(jié)果是否顯示,前者是用于設(shè)置存儲過程的

          5
          .將SPOOL輸出中每行后面多余的空格去掉 
          SQL
          > SET TRIMS[OUT] {ON|OFF

          6
          .將指定的信息或一個空行輸出到屏幕上 
          PROMPT 
          [text] 
          備注:該命令在輸出提示、警告信息經(jīng)常使用


          下面我們使用Spool技術(shù)來導(dǎo)出一個表的數(shù)據(jù),我們要求做到:

          ①導(dǎo)出的過程不在SQL*PLUS屏幕上顯示
          ②導(dǎo)出的文本中不含有執(zhí)行的SQL命令
          ③導(dǎo)出的文本中不含有字段名
          ④導(dǎo)出的文本中使用逗號(英文)作為字段的分隔符
          ⑤導(dǎo)出的文本中每行長200個字符
          ⑥導(dǎo)出的文本中每頁999行
          ⑦導(dǎo)出的文本中每行后面的空格必須被截取

          那么下面我們來看一下應(yīng)該如何做到,首先創(chuàng)建一個用于導(dǎo)出的sql腳本文件,我們將其命名為ExpData.sql,腳本內(nèi)容如下所示:

          set echo off                --關(guān)閉腳本中正在執(zhí)行的SQL語句的顯示
          set feedback off         --關(guān)閉當(dāng)前sql語句查詢或修改的行數(shù)的顯示
          set verify off
          set term off                 --關(guān)閉屏幕上輸出內(nèi)容的顯示
          set trimspool on        --將每行后面多余的空格去掉
          set linesize 200         --設(shè)置每行最多顯示200個字符
          set pagesize 999       --設(shè)置每頁最多顯示999行記錄
          --
          set newpage none  --設(shè)置頁與頁之間的分隔
          set heading off          --關(guān)閉標(biāo)題的輸出

          spool d:\peng\
          database\oracle\tables.xls
          @d:\peng\database\oracle\get_table.sql
          spool 
          off  --關(guān)閉輸出


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

          select id || ',' || name || ',' || remark || ',' || reg_date || ',' || salary from testtable;


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

          SQL> @d:\peng\database\oracle\ExpData.sql
          SQL
          > 

          注意在這里我們看不到任何的輸出結(jié)果,是因為我們使用了set echo off和set term off兩個選項的結(jié)果。在大數(shù)據(jù)量導(dǎo)出的情況下關(guān)閉屏幕的輸出非常有必要,因為這將大大提高程序執(zhí)行的效率,否則的話會導(dǎo)致SQL*PLUS不停地刷新屏幕和緩沖區(qū)。

          其實我們也可以把上述的幾個選項寫在一塊,比如說現(xiàn)在我們要將導(dǎo)出文件改為htm文件格式,我們可以這樣寫
          set term off verify off feedback off  pagesize 999  heading on
          set markup html on entmap ON spool on preformat off

          spool d:\peng\
          database\oracle\tables.htm
          @d:\peng\database\oracle\get_table.sql
          spool 
          off

          這里我們使用set markup html on來將文件導(dǎo)出成為HTML格式,同時注意導(dǎo)出文件名的后綴要改為.htm。因為采用了HTML表格的形式,所以我們將第二個腳本稍微修改一下
          select *  from testtable;

          導(dǎo)出的最終結(jié)果如下:
          SQL> @d:\peng\database\oracle\ExpData.sql
          SQL
          > 



          注意在導(dǎo)出完成后SQL*PLUS的提示符變成了SQL>這是因為我們打開了HTML格式的輸出所致(>),如果我們要恢復(fù)成默認(rèn)的提示符格式,只需要再次執(zhí)行一次:
          set markup html off
          就可以了。


          -------------------------------------------------------------
          生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
          posted on 2008-05-26 23:36 Paul Lin 閱讀(2068) 評論(0)  編輯  收藏 所屬分類: Oracle SQL/PLSQL
          <2008年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(21)

          隨筆分類

          隨筆檔案

          BlogJava熱點博客

          好友博客

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 蒙阴县| 乐平市| 长沙市| 曲沃县| 乌什县| 隆安县| 德令哈市| 夏河县| 内黄县| 巴青县| 浙江省| 江口县| 民乐县| 溧水县| 门头沟区| 佳木斯市| 长海县| 吉水县| 磴口县| 邯郸市| 芷江| 迭部县| 南川市| 安远县| 崇仁县| 高淳县| 余庆县| 浑源县| 万州区| 翼城县| 海丰县| 嘉峪关市| 浦城县| 梧州市| 太原市| 阿城市| 宿州市| 都江堰市| 鄯善县| 商城县| 涪陵区|