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 ONSQL>
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;
EMPNO | ENAME |
7369 | SMITH |
7499 | ALLEN |
SQL>
注意其中的spool on, 当在屏幕上输出的时候, 我们看不出与不加spool on有什么区别, 但是当我们使用spool filename 输出到文件的时候, 会看到spool文件中出现了
等tag.
SQL> spool c:\emp.htm
SQL> /
... ...
SQL> spool off
查看生成的emp.htm文件的内容:
SQL*Plus Report
SQL> /
EMPNO | ENAME |
7369 | SMITH |
7499 | ALLEN |
SQL> spool off
用ie打开emp.htm文件后的样式如下:
现在看看spool off的情况下:
SQL> set markup html on spool off
SQL> spool c:\emp2.htm
SQL> /
EMPNO | ENAME |
7369 | SMITH |
7499 | ALLEN |
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-