也許你還不知道 - sqlplus的小秘密(1)
===========================================================
作者: oldwain(
http://blog.itpub.net/oldwain
)
發(fā)表于:2005.09.05 15:09
分類:
出處:
http://blog.itpub.net/post/6/40158
---------------------------------------------------------------
有沒有為了dbms_output.put_line會(huì)"吃掉"最前面的空格而苦惱?
代碼:
[
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
.
(俺以前曾經(jīng)很苦惱為了保留空格, 嘗試了加".", 加不可見字符等辦法, 不過終究覺得不自然)
實(shí)際上, 只要在set serveroutput on后加上format wrapped參數(shù), 就可以避免這個(gè)問題
代碼:
[
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
.
(需要引用, 請(qǐng)注明出處:
http://blog.itpub.net/oldwain
)
也許你還不知道 - sqlplus的小秘密(2)
===========================================================
作者: oldwain(http://blog.itpub.net/oldwain)
發(fā)表于:2005.09.06 10:06
分類:
出處:http://blog.itpub.net/post/6/40252
---------------------------------------------------------------
Sql*plus中, 不允許sql語句中間有空行, 這在從其它地方拷貝腳本到sql*plus中執(zhí)行時(shí)很麻煩. 比如下面的腳本:
select deptno, empno, ename
from emp
where empno = '7788';
如果拷貝到sql*plus中執(zhí)行, 就會(huì)出現(xiàn)錯(cuò)誤:
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遇到空行就認(rèn)為是語句結(jié)束了.
其實(shí)要改變這種現(xiàn)象, 只要使用SQLBLANKLINES參數(shù)就可以了
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>
(需要引用, 請(qǐng)注明出處: http://blog.itpub.net/oldwain)
也許你還不知道 - sqlplus的小秘密(3)
===========================================================
作者: oldwain(http://blog.itpub.net/oldwain)
發(fā)表于:2005.09.07 10:04
分類:
出處:http://blog.itpub.net/post/6/40364
---------------------------------------------------------------
有沒有過這樣的經(jīng)歷? 在sql*plus中敲了很長的命令后, 突然發(fā)現(xiàn)想不起某個(gè)列的名字了, 如果取消當(dāng)前的命令,待查詢后再重敲, 那太痛苦了. 當(dāng)然你可以另開一個(gè)sql*plus窗口進(jìn)行查詢, 但這里提供的方法更簡單.
比如說, 你想查工資大于4000的員工的信息, 輸入了下面的語句:
scott@O9I.US.ORACLE.COM> select deptno,
2 empno,
3 ename
4 from emp
5 where
這時(shí), 你發(fā)現(xiàn)你想不起來工資的列名是什么了.
這種情況下, 只要在下一行以#開頭, 就可以執(zhí)行一條sql*plus命令, 執(zhí)行完后, 剛才的語句可以繼續(xù)輸入
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>
(需要引用, 請(qǐng)注明出處: http://blog.itpub.net/oldwain)
也許你還不知道 - sqlplus的小秘密(4)
===========================================================
作者: oldwain(
http://blog.itpub.net/oldwain
)
發(fā)表于:2005.09.08 12:54
分類:
出處:
http://blog.itpub.net/post/6/40485
---------------------------------------------------------------
也許你還不知道 - sqlplus的小秘密(4)
這個(gè)也許不算什么秘密, 很多人大概都知道, 不過用過的人也許不多.
在8.1.7版本(也許是816? 不太確定)以后, sql*plus中有一個(gè)set markup html的命令, 可以將sql*plus的輸出以html格式展現(xiàn).
代碼:
[
email
]
scott
@
O9I
.
US
.
ORACLE
.
COM
[/
email
]>
set markup html on spool on
">scott@O9I.US.ORACLE.COM> 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, 當(dāng)在屏幕上輸出的時(shí)候, 我們看不出與不加spool on有什么區(qū)別,
但是當(dāng)我們使用spool filename 輸出到文件的時(shí)候, 會(huì)看到spool文件中出現(xiàn)了<html><body>等tag.
代碼:
">scott@O9I.US.ORACLE.COM> 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> spool off
查看生成的emp.htm文件的內(nèi)容:
代碼:
<
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> /
<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
現(xiàn)在看看spool off的情況下:
代碼:
">scott@O9I.US.ORACLE.COM> set markup html on spool off
<br>
"
>
scott
@
O9I
.
US
.
ORACLE
.
COM
&
gt
;
spool c
:
emp2
.
htm
<
br
>
">scott@O9I.US.ORACLE.COM> /
<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文件的內(nèi)容:
代碼:
">scott@O9I.US.ORACLE.COM> /
<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文件頭, 所以我們可以直接作為內(nèi)容插入到網(wǎng)頁中.
總結(jié): 如果要生成一個(gè)完整的html文件, 就使用spool on選項(xiàng), 如果只是要內(nèi)容部分(用來添加到一個(gè)現(xiàn)有的網(wǎng)頁中), 那么就使用spool off選項(xiàng).
另外, set markup html還有很多選項(xiàng)可以用來定制生成的html的各個(gè)部分, 例如head, body, table等, 這里不再逐一說明, 詳細(xì)信息可以參考SQL*Plus User's Guide and Reference.
適用場(chǎng)景: 當(dāng)需要定時(shí)更新一個(gè)從數(shù)據(jù)庫中獲取內(nèi)容的靜態(tài)頁面時(shí), 這種方法絕對(duì)是快捷的并且容易實(shí)現(xiàn)的.
(需要引用, 請(qǐng)注明出處:
http://blog.itpub.net/oldwain
)
posted on 2006-04-27 10:03
崛起的程序員 閱讀(267)
評(píng)論(0) 編輯 收藏 所屬分類:
oracle