Oracle  11g从入门到精通(第2版) (软件开发视频大讲堂)
上QQ阅读APP看书,第一时间看更新

      3.4 格式化查询结果

视频讲解:光盘\TM\lx\3\格式化查询结果.mp4

为了在SQL*Plus环境中生成符合用户需要规范的报表,SQL*Plus工具提供了多个用于格式化查询结果的命令,使用这些命令可以实现设置列的标题、定义输出值的显示格式和显示宽度、为报表增加头标题和底标题、在报表中显示当前日期和页号等功能。下面就对常用的格式化命令进行讲解。

3.4.1 COLUMN命令

该命令可以实现格式化查询结果、设置列宽度、重新设置列标题等功能。其语法格式如下:

        COL[UMN] [column_name | alias | option]

column_name:用于指定要设置的列的名称。

alias:用于指定列的别名,通过它可以把英文列标题设置为汉字。

option:用于指定某个列的显示格式,option选项的值及其说明如表3.3所示。

表3.3 option选项的值及其说明

如果在关键字column后面未指定任何参数,则column命令将显示SQL*Plus环境中所有列的当前定义属性;如果在column后面指定某个列名,则显示指定列的当前定义属性。接下来将对表3.3中的常用option选项值进行举例说明。

1. FORMAT选项

该选项用于格式化指定的列,需要在FORMAT关键字的后面跟一个掩码格式。

【例3.19】 使用FORMAT选项格式化scott.emp表中的员工工资为$999,999.00格式,代码如下(实例位置:光盘\TM\sl\3\7)

        SQL> col sal format $999,999.00
        SQL> select empno, ename, sal from scott.emp;

本例运行结果如图3.10所示。

图3.10 格式化员工工资

2. HEADING选项

该选项用于定义列标题,比如,许多数据表或视图的列名都为英文形式,可以使用此选项将英文形式的列标题显示为中文形式。

【例3.20】 使用HEADING选项把scott.emp表中的empno、ename、sal三个列名转换为中文形式,代码如下(实例位置:光盘\TM\sl\3\8)

        SQL>col empno heading雇员编号
        SQL>col ename heading雇员姓名
        SQL>col sal heading雇员工资
        SQL> select empno, ename, sal from scott.emp;

本例运行结果如图3.11所示。

图3.11 把列名转换为中文形式

3. NULL选项

在该选项的后面指定一个字符串,如果列的值为null,则用该字符串代替空值。

【例3.21】 使用NULL选项把scott.emp表中comm列值为null显示成“空值”字符串,代码如下(实例位置:光盘\TM\sl\3\9)

        SQL> col comm null ’空值’
        SQL> select empno, ename, comm from scott.emp where comm is null;

本例运行结果如图3.12所示。

图3.12 把null显示成“空值”字符串

4. ON|OFF选项

该选项用于控制定义的显示属性的状态,OFF表示定义的所有显示属性都不起作用,默认为ON。

【例3.22】设置scott.emp表中的sal列(工资列)的格式为$999,999.00,但同时使用OFF选项取消定义的列属性状态,输出结果显示sal列没有被格式化,代码如下(实例位置:光盘\TM\sl\3\10)。

        SQL> col sal format $999,999.00
        SQL> col sal off
        SQL> select empno, ename, sal from scott.emp;

本例运行结果如图3.13所示。

图3.13 使用OFF选项取消定义的列属性状态

5. WRAPPED/WORD_WRAPPED选项

这两个选项都用于实现折行的功能,WRAPPED选项按照指定长度折行,WORD_WRAPPED选项按照完整字符串折行。

【例3.23】 使用WRAPPED选项实现按照指定长度折行,代码及运行结果如下。

        SQL> select col1 from test;


        COL1
        -------------------
        HOW ARE YOU?


        已选择1行


        SQL> column col1 format a5
        SQL> column col1 wrapped
        SQL> select col1 from test;


        COL1
        ------------------
        HOW A
        RE YO
        U?

【例3.24】 使用WORD_WRAPPED选项按照完整字符串折行,代码及运行结果如下。

        SQL> col col1 word_wrapped


        COL1
        ------------------
        HOW
        ARE
        YOU?

3.4.2 TTITLE和BTITLE命令

在SQL*Plus环境中,执行SQL语句后的显示结果在默认情况下包括列标题、页分割线、查询结果和行数合计等内容,用这些默认的输出信息打印报表,并不十分美观。如果能为整个输出结果设置报表头(即头标题)、为每页都设置页标题和页码、为整个输出结果设置报表尾(如打印时间或打印人员),那么使用这样的输出结果打印报表一定非常美观。为了实现这些功能,SQL*Plus工具提供了TTITLE和BTITLE命令,这两个命令分别用来设置打印时每页的顶部和底部标题。其中,TTITLE命令的语法格式如下:

表3.4 printspec选项的值及其说明

        TTI[TLE] [printspec [text|variable] ...] | [OFF|ON]

printspec:用来作为头标题的修饰性选项。printspec选项的值及其说明如表3.4所示。

text:用于设置输出结果的头标题(即报表头文字)。

variable:用于在头标题中输出相应的变量值。

OFF:表示禁止打印头标题。

ON:表示允许打印头标题。

注意

BTITLE的语法格式与TTITLE的语法格式相同。如果在TTITLE或BTITLE命令后没有任何参数,则显示当前的TTITLE或BTITLE的定义。

【例3.25】 打印输出scott.salgrade数据表中的所有记录,并要求为每页设置头标题(报表名称)和底标题(打印时间和打印人),代码如下(实例位置:光盘\TM\sl\3\11)

        SQL> set pagesize 8
        SQL>ttitle left'          销售情况排行表’
        SQL>btitle left’打印日期:2011年9月20日   打印人:东方’
        SQL> select * from scott.salgrade;

本例运行结果如图3.14所示。

图3.14 显示打印时间和打印人

在上面的例子中,头标题“销售情况排行表”是一个固定的字符串,另外,头标题也可以使用变量来输出。

【例3.26】 打印输出scott.salgrade数据表中的所有记录,并要求头标题和底标题都使用define命令定义的变量输出,代码如下(实例位置:光盘\TM\sl\3\12)。

        SQL> set pagesize 8
        SQL>define varT='          雇员信息表’
        SQL> define varB=’操作员:东方’
        SQL> ttitle left varT
        SQL> btitle left varB
        SQL> select empno, ename, job from scott.emp;

本例运行结果如图3.15所示。

图3.15 输出头标题和底标题

上面代码中所设置的头标题和底标题的有效期直到本次会话结束后才终止。若要手动清除这些设置,可以分别使用ttitle off命令和btitle off命令取消头标题和底标题的设置信息。