ORACLE 格式化输出[转]

来源:互联网 发布:犀牛软件培训上海 编辑:程序博客网 时间:2024/05/09 19:28
§2.6.1   一般数据的格式化输出
 
OracleSQL> 下,经常用COLUMN 命令来对所输出的列进行格式化,即按照一定的格式进行显示。COLMUN命令语法如下:
 
COL[UMN] [{ column | expr } [ option_1 ... option_n ] ]
 
column:列名
expr:有效的 SQL 表达式
option_1... option_n可以是下列之一:
ALI[AS] alias
CLE[AR]
FOLD_A[FTER]
FOLD_B[EFORE]
FOR[MAT] format
HEA[DING] text
JUS[TIFY] {L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]}
LIKE {expr|alias}
NEWL[INE]
NEW_V[ALUE] variable
NOPRI[NT]|PRI[NT]
NUL[L] text
OLD_V[ALUE] variable
ON|OFF
WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED]
 
下面给出常用的关键字的解释:
Alias     给出列的别名,BREAKCOUMN可以引用所定义的别名。
CLEAR 取消列的定义。
FORMAT 列显示格式,format为:
9999990     90的个数决定最多显示多少位
9,999,999.99 按照逗号和小数点来显示数据,若是0以空格显示
099999      显示前面补0
$999,999.99 数字前加美圆号
B99999      若为0 ,则结果为空白
99999Mi     若数字为负,则负号放在数字后(右边),缺省放在左边
99999PR     负号将以括号括起
9.999EEEE   以科学记数法表示(必须有4E
999V99      数字乘以 10n , 1234变为 123400
DATE       采用日期数字格式(MM/DD/YY
 
 
Heading 重新标记列的显示标题,如:
 
SQL> col ename heading 姓名 format a10
SQL> select ename,sal from emp;
 
 
例子:
SQL
COLUMN  SALARY  FOR  $9,999,999.99
COLUMN  LAST_NAME  FOR  A35.
 
§2.6.2   日期的格式化输出
Oracle系统提供了一个 NLS_DATE_FORMAT的环境变量来设置日期的显示格式。用它可以完成按照不同格式要求的显示,比如按照中国的习惯为 yyyymmdd日等。
 
1.系统日期 sysdate 的显示
用sysdate 可以显示ORACLE RDBMS 所在机器的日期及时间,如:
SQL> alter session set nls_date_format ='"公元"yyyy"年"mm"月"dd"日"';
 
会话已更改。
 
SQL> select sysdate from dual;
 
SYSDATE
------------------
公元2001年05月30日
 
 
2.日期类型的显示
 
select sysdate,to_char(sysdate,yyyy.mm.dd hh24:mi;ss) from dual;
 
SQL> connect scott/tiger
已连接。
SQL> alter session set nls_date_format ='yyyy"年"mm"月"dd"日生"';
 
会话已更改。
SQL> col HIREDATE heading 生日
SQL> col sal heading 工资
SQL> col sal ename 姓名
SQL> select ename,sal,hiredate from emp;
 
姓名             工资             生日
---------- ---------- -----------------
SMITH             800 1980年12月17
ALLEN            1600 1981年02月20
WARD             1250 1981年02月22
JONES            2975 1981年04月02
MARTIN           1250 1981年09月28
BLAKE            2850 1981年05月01
CLARK            2450 1981年06月09
SCOTT            3000 1987年04月19
KING             5000 1981年11月17
TURNER           1500 1981年09月08
ADAMS            1100 1987年05月23
JAMES             950 1981年12月03
FORD             3000 1981年12月03
MILLER           1300 1982年01月23
 
已选择14行。
§2.7 加标题
有时在输出一些结果时,可能需要加一些标题,如表上面的顶标题,落款等。这样的要求可由TtitleBtitle来完成。
ttitle和btitle
 
ttitle   [center|left|right]string    顶标题
btitle   [center|left|right]string    底标题
ttitle   center   'XX公司人员情况表'
btitle   left     '制表人:xxxx'   right    '日期:xxxx年xx月'
Clear    ttitle
 
§2.8 建立简单报告
我们可以用TTITLEBTITLECOLUMNBREAK ONCOMPUTE SUMSET LINESIZESET PAGESIZESET NEWPAGE来设置查询结果的显示格式;在用 SPOOL 命令将显示结果输出到一个操作系统文件中去,一般输出文件的类型为.LST
 
建立简单报告主要使用下面命令来实现:
 
1. SPOOL命令
 
SPOOL   filename      将缓冲区的内容写到文件中
SPOOL   off           终止写命令
 
2. COLUMN   命令
column    col_name[,heading]    format     format_spe
把字段的结果指定为一种输出格式
COL   name   heading   '姓名'   for    a10
COL    sal      heading   '工资'    for    9,999.99
 
3.ttitle、btitle
 
ttitle   [center|left|right]string    顶标题
btitle   [center|left|right]string    底标题
ttitle   center   'XX公司人员情况表'
btitle   left     '制表人:赵元杰'   right    '日期:1998.11月'
Clear    ttitle
 
4.break、compute
 
clear    breaks,clear    computes
break   on   column     在该列上中断
break   on   row        在每一行上中断
break   on    Page
break   on    report
skip     n               跳过n行
skip     page            跳过未用完的页
compute       avg
compute      count
compute       max
compute       min
compute       std
compute       sum
compute       var
compute       num     计算所有行
compute       sum   of   sal   on   deptno
 
5.set   在报表中的设置
l       set    termout    off、set   termout   on 命令
l       set   termout    off   常用SPOOL    XXX前,即关闭报表在屏幕上的显示(节省时间)
l       set   termout    on    常用SPOOL   off之后,即恢复报表在屏幕上的显示
l       set   ECHO{OFF|ON} 显示执行当中的各命令(即用start    时),set   echo    受到   set  termout    的影响
l       set    Lin[esize]{80|integer}    设置行宽度,最大值999
l       set pag[esize]   {24|integer}   设置页的大小
 
例子:
SQL>COL ename heading ‘姓名’ for a12
SQL>COL sal heading ‘工资’ for a999,999.99
SQL>COL hiredate heading ‘出生
SQL>SET LINESIZE 200
SQL>SET PAGESIZE 60
SQL>SPOOL c:\all_emp
SQL>select ename,sal,deptno,hiredate from emp order by deptno;
SQL>SPOOL OFF
 
§2.9 输入变量
Oracle提供一种在处理SQL语句时可以将参数作为变量来对待的技术,即在条件句中可以是变量而不是具体的值,这样的处理就是输入变量。这样做的目的就是可以重复使用同样的语句,每次只要输入相应的值即可。要实现将参数写成为变量,只要在变量前加一个&号即可。看下面语句:
 
Select sid, serial#,username, command from v$session
Where   USERNAME = upper(‘&usr’);
 
这样的语句在运行中,系统会自动提示你回答变量的具体值,上面语句运行时提示和回答时显示的信息如下:
 
SQL> Select sid, serial#,username, command from v$session
 Where   USERNAME = upper('&usr');
输入 usr 的值: sys
原值    2: Where   USERNAME = upper('&usr')
新值    2: Where   USERNAME = upper('sys')
 
   SID SERIAL# USERNAME      COMMAND
---------- ---------- ------------------------------ ----------
         7      26 SYS                       3
 
 
在变量说明中,可以使用多个变量,比如:
 
Alter system kill session ‘&sid,&ser’;
Alter system kill session ‘&会话号,&序列号’;
 
它的运行情况如下:
 
SQL> Select sid, serial#,username, command from v$session;
 
   SID SERIAL# USERNAME       COMMAND
---------- ---------- ------------------------------ ----------
         1          1                 0
         2          1                 0
         3          1                 0
         4          1                 0
         5          1                 0
         6          1                 0
         7         26 SYS             3
         8         16 ZHAO           0
 
已选择8行。
 
SQL> Alter system kill session '&sid,&ser';
输入 sid 的值8
输入 ser 的值16
原值    1: Alter system kill session '&sid,&ser'
新值    1: Alter system kill session '8,16'
 
系统已更改。
 
一般系统缺省下是使用 “&” 符号来定义变量,你也可以使用另外的符号来代替,比如不喜欢用 & 而要用 ?,则有:
 
SQL> set define ?
SQL> select sid,serial#,username from v$session where username='?usr';
输入 usr 的值: SYS
原值    1: select sid,serial#,username from v$session where username='?usr'
新值    1: select sid,serial#,username from v$session where username='SYS'
 
       SID    SERIAL# USERNAME
---------- ---------- ------------------------------
7                                26 SYS
 
次时由于我们修改了会话环境的参数值,可以用下面命令查看:
 
SQL> show define
define "?" (hex 3f)

0 0