SQL *PLUS Repost的开发方法
使用SQL*PLUS 可直接在IE Browser中生成规整的字符型Report. 实现方法简单,布署容易。
方法:
1. 利用文本编辑器编写SQL*PLUS 脚本,保存成 .sql 文件。
2. 上传sql 文件至应用的sql 目录。
3. 注册Method 为SQL*PLUS 的Concurrent,并调用此 sql 文件.
SQL*PLUS Report 的格式化方法:
1. 改变列标题
COLUMN <字段名或字段别名> HEADING <标题名>
例:
COLUMN LAST_NAME HEADING 'LAST NAME'
COLUMN SALARY HEADING 'MONTHLY SALARY'
COLUMN COMMISSION_PCT HEADING 'COMMISSION'
2. 列标题自动折行
COLUMN <字段名或字段别名> HEADING <标题名1-1|标题名1-2>
例:
COLUMN SALARY HEADING 'MONTHLY|SALARY'
COLUMN LAST_NAME HEADING 'LAST|NAME'
3. 改变标题下划线格式(Format of underline)
SET UNDERLINE
例:
SET UNDERLINE =
/
4. 改变列的显示格式
COLUMN <字段名或字段别名> FORMAT <格式描述>
数值型格式描述与to_number函数基本一致,如:
$99.990
其它格式数据均用A(n)来设置宽度,如:
A10
如果有字符超出10,则会自动折行. 除非你做如下设置 :
SET WRAP OFF
则多出的字符会被截掉.
5. 复制字段格式设置
COLUMN <目标字段名> LIKE <来源字段名> HEADING <标题名>
例:
COLUMN COMMISSION_PCT LIKE SALARY HEADING BONUS
6. 不显示某一列
COLUMN <目标字段名> NOPRINT
7. 排序后,重复字段不显示(即分组)
BREAK ON <字段名>
例:
BREAK ON DEPARTMENT_ID;
SELECT DEPARTMENT_ID, LAST_NAME, SALARY
FROM EMP_DETAILS_VIEW
WHERE SALARY > 12000
ORDER BY DEPARTMENT_ID;
DEPARTMENT_ID LAST_NAME SALARY
------------- ------------------------- ----------
20 Hartstein 13000
80 Russell 14000
Partners 13500
90 King 24000
Kochhar 17000
De Haan 17000
8. 排序后,重复字段不显示,并用空行分隔(分组间间距加大)
BREAK ON <字段名> SKIP <N>
N代表空行行数
BREAK ON <字段名> SKIP PAGE
PAGE 代表分页
9. 每行均用空行分隔
BREAK ON ROW SKIP <N>
N代表空行行数
BREAK ON ROW SKIP PAGE
PAGE 代表分页
10. 复合式BREAK ON
BREAK ON DEPARTMENT_ID SKIP PAGE ON JOB_ID SKIP 1
首先基于department_id进行分页,然后基于job_id进行空行分隔
11. 分组汇总-基于字段
BREAK ON <字段名>
COMPUTE <FUNCTION> LABEL <LABEL NAME> OF <COLUMN LIST> ON <BREAK COLUMN>
Compute Functions
SUM: Sum of the values in the column.
MINIMUM: Minimum value in the column.
MAXIMUM: Maximum value in the column.
AVG: Average of the values in the column.
STD: Standard deviation of the values in the column.
VARIANCE: Variance of the values in the column.
COUNT: Number of non-null values in the column.
NUMBER: Number of rows in the column.
12. 分组汇总-基于页面
BREAK ON PAGE
COMPUTE <FUNCTION> LABEL <LABEL NAME> OF <COLUMN LIST> ON PAGE
13. 分组汇总-基于报表
BREAK ON REPORT
COMPUTE <FUNCTION> LABEL <LABEL NAME> OF <COLUMN LIST> ON REPORT
14. 定义页面页眉及页脚
页眉:
TTITLE <POSITION> <DESCRIPTION>
页脚:
BTITLE <POSITION> <DESCRIPTION>
其中的< POSITION > 有如下几种:
CENTER: 中间
LEFT: 左边
RIGHT: 右边
例:
TTITLE CENTER "ACME SALES DEPARTMENT PERSONNEL REPORT"
BTITLE CENTER "COMPANY CONFIDENTIAL"
同时设置多个位置,可通过如下方法实现:
保持在同一行: 加“-”实现
例:
TTITLE LEFT ‘PAGE:’ –
RIGHT ‘DATE:’
如果需要换行,可加SKIP <N> 实现
例:
TTITLE CENTER 'A C M E W I D G E T' SKIP 1 -
CENTER ==================== SKIP 1
LEFT 'PERSONNEL REPORT' -
RIGHT 'SALES DEPARTMENT' SKIP 2
在标题中加空格的方法:
COL <N>
例:
TTITLE LEFT 'ACME WIDGET' SKIP 1 -
COL 6 'SALES DEPARTMENT PERSONNEL REPORT' SKIP 2
15. 定义报表页眉及页脚
REPHEADER <POSITION> <DESCRIPTION>
REPFOOTER <POSITION> <DESCRIPTION>
其它方法同页面页眉页脚.
16. 在页眉页脚中加入自定义变量
可先定义变量
COLUMN <字段名> NEW_VALUE <变量名>
然后通过SQL 语句为变量赋值
例:
COLUMN sys_time FORMAT a8 new_value x_time print
SELECT
to_char(sysdate, 'hh:mi:ss') "sys_time"
FROM
dual;
17. 在页眉页脚中加入系统变量
SQL.PNO: 页码 TTITLE LEFT 'ACME WIDGET' RIGHT 'PAGE:' SQL.PNO SKIP 2