隨筆-88  評論-77  文章-48  trackbacks-0
          也許你還不知道 - sqlplus的小秘密(1)
          ===========================================================
          作者: oldwain(
          http://blog.itpub.net/oldwain )
          發表于:2005.09.05 15:09
          分類:
          出處:
          http://blog.itpub.net/post/6/40158
          ---------------------------------------------------------------

          有沒有為了dbms_output.put_line會"吃掉"最前面的空格而苦惱?
          						代碼:

          [ email ] scott @ O9I . US . ORACLE . COM [/ email ]> set serveroutput on
          [ email ] scott @ O9I . US . ORACLE . COM [/ email ]> exec dbms_output . put_line ( '???abc'
          );
          abc

          PL
          / SQL procedure successfully completed
          .




          (俺以前曾經很苦惱為了保留空格, 嘗試了加".", 加不可見字符等辦法, 不過終究覺得不自然)
          實際上, 只要在set serveroutput on后加上format wrapped參數, 就可以避免這個問題
          						代碼:

          [ email ] scott @ O9I . US . ORACLE . COM [/ email ]> set serveroutput on format wrapped
          [ email ] scott @ O9I . US . ORACLE . COM [/ email ]> exec dbms_output . put_line ( '???abc'
          );
          ???
          abc

          PL
          / SQL procedure successfully completed
          .


          (需要引用, 請注明出處: http://blog.itpub.net/oldwain )

          也許你還不知道 - sqlplus的小秘密(2)
          ===========================================================
          作者: oldwain(http://blog.itpub.net/oldwain)
          發表于:2005.09.06 10:06
          分類:
          出處:http://blog.itpub.net/post/6/40252
          ---------------------------------------------------------------

          Sql*plus中, 不允許sql語句中間有空行, 這在從其它地方拷貝腳本到sql*plus中執行時很麻煩. 比如下面的腳本:

          select deptno, empno, ename
          from emp

          where empno = '7788';
          如果拷貝到sql*plus中執行, 就會出現錯誤:


          scott@O9I.US.ORACLE.COM> select deptno, empno, ename
          2 from emp
          3
          scott@O9I.US.ORACLE.COM> where empno = '7788';
          SP2-0734: unknown command beginning "where empn..." - rest of line ignored.
          scott@O9I.US.ORACLE.COM>

          原因是sqlplus遇到空行就認為是語句結束了.
          其實要改變這種現象, 只要使用SQLBLANKLINES參數就可以了
          scott@O9I.US.ORACLE.COM> SET SQLBLANKLINES ON
          scott@O9I.US.ORACLE.COM>
          scott@O9I.US.ORACLE.COM> select deptno, empno, ename
          2 from emp
          3
          4 where empno = '7788';

          DEPTNO EMPNO ENAME
          ---------- ---------- ----------
          20 7788 SCOTT

          scott@O9I.US.ORACLE.COM>
          (需要引用, 請注明出處: http://blog.itpub.net/oldwain)

          也許你還不知道 - sqlplus的小秘密(3)
          ===========================================================
          作者: oldwain(http://blog.itpub.net/oldwain)
          發表于:2005.09.07 10:04
          分類:
          出處:http://blog.itpub.net/post/6/40364
          ---------------------------------------------------------------

          有沒有過這樣的經歷? 在sql*plus中敲了很長的命令后, 突然發現想不起某個列的名字了, 如果取消當前的命令,待查詢后再重敲, 那太痛苦了. 當然你可以另開一個sql*plus窗口進行查詢, 但這里提供的方法更簡單.

          比如說, 你想查工資大于4000的員工的信息, 輸入了下面的語句:

          scott@O9I.US.ORACLE.COM> select deptno,
          2 empno,
          3 ename
          4 from emp
          5 where
          這時, 你發現你想不起來工資的列名是什么了.

          這種情況下, 只要在下一行以#開頭, 就可以執行一條sql*plus命令, 執行完后, 剛才的語句可以繼續輸入


          scott@O9I.US.ORACLE.COM> select deptno,
          2 empno,
          3 ename
          4 from emp
          5 where
          6 #desc emp
          Name Null? Type
          ----------------------------------------- -------- --------------

          EMPNO NOT NULL NUMBER(4)
          ENAME VARCHAR2(10)
          JOB VARCHAR2(9)
          MGR NUMBER(4)
          HIREDATE DATE
          SAL NUMBER(7,2)
          COMM NUMBER(7,2)
          DEPTNO NUMBER(2)

          6 sal > 4000;

          DEPTNO EMPNO ENAME
          ---------- ---------- ----------
          10 7839 KING

          scott@O9I.US.ORACLE.COM>
          (需要引用, 請注明出處: http://blog.itpub.net/oldwain)


          也許你還不知道 - sqlplus的小秘密(4)
          ===========================================================
          作者: oldwain(
          http://blog.itpub.net/oldwain )
          發表于:2005.09.08 12:54
          分類:
          出處:
          http://blog.itpub.net/post/6/40485
          ---------------------------------------------------------------

          也許你還不知道 - sqlplus的小秘密(4)

          這個也許不算什么秘密, 很多人大概都知道, 不過用過的人也許不多.

          在8.1.7版本(也許是816? 不太確定)以后, sql*plus中有一個set markup html的命令, 可以將sql*plus的輸出以html格式展現.

          												代碼:

          [ email ] scott @ O9I . US . ORACLE . COM [/ email ]> set markup html on spool on
          ">scott@O9I.US.ORACLE.COM&gt; select empno, ename from emp where rownum<3;
          <br>
          <p>
          <table border='1' width='90%' align='center' summary='Script output'>
          <tr>
          <th scope="
          col
          ">
          EMPNO
          </th>
          <th scope="
          col
          ">
          ENAME
          </th>
          </tr>
          <tr>
          <td align="
          right
          ">
          7369
          </td>
          <td>
          SMITH
          </td>
          </tr>
          <tr>
          <td align="
          right
          ">
          7499
          </td>
          <td>
          ALLEN
          </td>
          </tr>
          </table>
          <p>"
          > scott @ O9I . US . ORACLE . COM & gt
          ;


          注意其中的spool on, 當在屏幕上輸出的時候, 我們看不出與不加spool on有什么區別,
          但是當我們使用spool filename 輸出到文件的時候, 會看到spool文件中出現了<html><body>等tag.

          												代碼:

          ">scott@O9I.US.ORACLE.COM&gt; spool c:emp.htm
          <br>
          "
          > scott @ O9I . US . ORACLE . COM & gt
          ; /
          <
          br
          >
          <
          p
          >
          <
          table border = '1' width = '90%' align = 'center' summary = 'Script output'
          >
          ......
          此處省略

          ">scott@O9I.US.ORACLE.COM&gt; spool off



          查看生成的emp.htm文件的內容:

          												代碼:

          < html >
          <
          head
          >
          <
          meta http - equiv = "Content-Type" content = "text/html; charset=WINDOWS-936"
          >
          <
          meta name = "generator" content = "SQL*Plus 9.2.0"
          >
          <
          style type = 'text/css' > body { font : 10pt Arial , Helvetica , sans - serif ; color : black ; background : White ;}
          p
          { font : 10pt Arial , Helvetica , sans - serif ; color : black ; background : White ;} table , tr , td { font : 10pt Arial
          ,
          Helvetica , sans - serif ; color : Black ; background :
          #f7f7e7; padding:0px 0px 0px 0px; margin:0px 0px 0px 0px;}
          th { font : bold 10pt Arial , Helvetica , sans - serif ; color :
          #336699; background:#cccc99; padding:0px 0px 0px 0px;}
          h1 { font : 16pt Arial , Helvetica , Geneva , sans - serif ; color :
          #336699; background-color:White;
          border - bottom : 1px solid
          #cccc99; margin-top:0pt; margin-bottom:0pt; padding:0px 0px 0px 0px;}
          h2 { font : bold 10pt Arial , Helvetica , Geneva , sans - serif ; color :
          #336699; background-color:White;
          margin - top : 4pt ; margin - bottom : 0pt ;} a { font : 9pt Arial , Helvetica , sans - serif ; color :
          #663300;
          background :
          #ffffff; margin-top:0pt; margin-bottom:0pt; vertical-align:top;}</style>
          < title > SQL * Plus Report </ title
          >
          </
          head
          >
          <
          body
          >
          ">scott@O9I.US.ORACLE.COM&gt; /
          <br>
          <p>
          <table border='1' width='90%' align='center' summary='Script output'>
          <tr>
          <th scope="
          col
          ">
          EMPNO
          </th>
          <th scope="
          col
          ">
          ENAME
          </th>
          </tr>
          <tr>
          <td align="
          right
          ">
          7369
          </td>
          <td>
          SMITH
          </td>
          </tr>
          <tr>
          <td align="
          right
          ">
          7499
          </td>
          <td>
          ALLEN
          </td>
          </tr>
          </table>
          <p>

          "
          > scott @ O9I . US . ORACLE . COM & gt ;
          spool off
          < br
          >
          </
          body
          >
          </
          html
          >


          用ie打開emp.htm文件后的樣式如下:

          http://blog.itpub.net/resserver.php?blogId=6&resource=sqlplushtml.JPG

          現在看看spool off的情況下:

          												代碼:

          ">scott@O9I.US.ORACLE.COM&gt; set markup html on spool off
          <br>
          "
          > scott @ O9I . US . ORACLE . COM & gt ; spool c : emp2 .
          htm
          < br
          >
          ">scott@O9I.US.ORACLE.COM&gt; /
          <br>
          <p>
          <table border='1' width='90%' align='center' summary='Script outpu
          ......此處省略
          "
          > scott @ O9I . US . ORACLE . COM & gt ;
          spool off
          < br
          >
          ">scott@O9I.US.OR


          查看生成的emp2.htm文件的內容:

          												代碼:

          ">scott@O9I.US.ORACLE.COM&gt; /
          <br>
          <p>
          <table border='1' width='90%' align='center' summary='Script output'>
          <tr>
          <th scope="
          col
          ">
          EMPNO
          </th>
          <th scope="
          col
          ">
          ENAME
          </th>
          </tr>
          <tr>
          <td align="
          right
          ">
          7369
          </td>
          <td>
          SMITH
          </td>
          </tr>
          <tr>
          <td align="
          right
          ">
          7499
          </td>
          <td>
          ALLEN
          </td>
          </tr>
          </table>
          <p>

          "
          > scott @ O9I . US . ORACLE . COM & gt ;

          																				代碼:



          由于這段代碼中沒有html文件頭, 所以我們可以直接作為內容插入到網頁中.

          總結: 如果要生成一個完整的html文件, 就使用spool on選項, 如果只是要內容部分(用來添加到一個現有的網頁中), 那么就使用spool off選項.

          另外, set markup html還有很多選項可以用來定制生成的html的各個部分, 例如head, body, table等, 這里不再逐一說明, 詳細信息可以參考SQL*Plus User's Guide and Reference.

          適用場景: 當需要定時更新一個從數據庫中獲取內容的靜態頁面時, 這種方法絕對是快捷的并且容易實現的.

          (需要引用, 請注明出處:
          http://blog.itpub.net/oldwain )

          posted on 2006-04-27 10:03 崛起的程序員 閱讀(269) 評論(0)  編輯  收藏 所屬分類: oracle

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 伊吾县| 马公市| 体育| 邢台县| 张北县| 龙州县| 尚义县| 阳新县| 陇南市| 永年县| 北碚区| 内丘县| 卢龙县| 新密市| 永德县| 清水河县| 木兰县| 镶黄旗| 屏山县| 恩施市| 乐安县| 南和县| 长子县| 巴彦县| 凯里市| 南通市| 盐源县| 利辛县| 隆德县| 巨野县| 四川省| 轮台县| 莆田市| 博兴县| 镇康县| 丘北县| 盐边县| 黄冈市| 安宁市| 冷水江市| 汉源县|