轉載自:
?
?
?
1、顯示空格
?
有沒有為了dbms_output.put_line會"吃掉"最前面的空格而苦惱?
?
SQL> set serveroutput on
SQL> exec dbms_output.put_line('?? abc');
abc
?
PL/SQL procedure successfully completed.
?
?
(俺以前曾經很苦惱為了保留空格, 嘗試了加".", 加不可見字符等辦法, 不過終究覺得不自然)
實際上, 只要在set serveroutput on后加上format wrapped參數, 就可以避免這個問題
?
SQL> set serveroutput on format wrapped
SQL> exec dbms_output.put_line('?? abc');
?? abc
?
PL/SQL procedure successfully completed.
?
?
?
2、SQL語句中的空行
?
Sql*plus中, 不允許sql語句中間有空行, 這在從其它地方拷貝腳本到sql*plus中執行時很麻煩. 比如下面的腳本:
?
select deptno, empno, ename
from emp
?
where empno = '7788';
如果拷貝到sql*plus中執行, 就會出現錯誤:
?
SQL> select deptno, empno, ename
? 2? from emp
? 3
SQL> where empno = '7788';
SP2-0734: unknown command beginning "where empn..." - rest of line ignored.
?
原因是sqlplus遇到空行就認為是語句結束了.
其實要改變這種現象, 只要使用SQLBLANKLINES參數就可以了.
?
SQL> SET SQLBLANKLINES ON
SQL>
select deptno, empno, ename
? 2? from emp
? 3
? 4? where empno = '7788';
?
??? DEPTNO????? EMPNO ENAME
---------- ---------- ----------
??????? 20?????? 7788 SCOTT
?
?
?
3、 # 的應用
?
?
??? 有沒有過這樣的經歷? 在sql*plus中敲了很長的命令后, 突然發現想不起某個列的名字了, 如果取消當前的命令,待查詢后再重敲, 那太痛苦了. 當然你可以另開一個sql*plus窗口進行查詢, 但這里提供的方法更簡單。這種情況下, 只要在下一行以#開頭, 就可以執行一條sql*plus命令, 執行完后, 剛才的語句可以繼續輸入
?
SQL> 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
?
?
?
?
4、以html格式展現輸出
?
sql*plus中有一個set markup html的命令, 可以將sql*plus的輸出以html格式展現
?
SQL> set markup html on spool on
SQL> 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>
?
SQL>
注意其中的spool on, 當在屏幕上輸出的時候, 我們看不出與不加spool on有什么區別, 但是當我們使用spool filename 輸出到文件的時候, 會看到spool文件中出現了<html><body>等tag.
?
SQL> spool?c:\emp.htm
<br>
SQL> /
<br>
<p>
<table border='1' width='90%' align='center' summary='Script output'>
... ...
?
SQL> spool off
<br>
查看生成的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>
SQL> /
<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>
?
SQL> spool off
<br>
</body>
</html>
?
用ie打開emp.htm文件后的樣式如下:
?
? 
?
?
現在看看spool off的情況下:
?
SQL> set markup html on spool off
<br>
SQL> spool c:\emp2.htm
<br>
SQL> /
<br>
<p>
<table border='1' width='90%' align='center' summary='Script outpu
... ...
SQL> spool off
<br>
?
查看生成的emp2.htm文件的內容:
?
SQL> /
<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>
?
SQL> spool off
?
由于這段代碼中沒有html文件頭, 所以我們可以直接作為內容插入到網頁中
總結: 如果要生成一個完整的html文件, 就使用spool on選項, 如果只是要內容部分(用來添加到一個現有的網頁中), 那么就使用spool off選項.
?
另外, set markup html還有很多選項可以用來定制生成的html的各個部分, 例如head, body, table等, 這里不再逐一說明, 詳細信息可以參考SQL*Plus User's Guide and Reference.
?
適用場景: 當需要定時更新一個從數據庫中獲取內容的靜態頁面時, 這種方法絕對是快捷的并且容易實現的.
-The End-