首页 百科知识 输出格式控制

输出格式控制

时间:2022-10-09 百科知识 版权反馈
【摘要】:前面介绍了SQL﹡Plus的SET命令,它所设置的格式影响SQL﹡Plus输出结果中的所有列数据。使用SQL*Plus提供的COLUMN命令能够灵活控制指定列的显示属性,而不影响其他列数据的显示格式。但当指定列为SELECT列表中的最后一列时,COLUMN命令则忽略该选项。而对于数字型列,显示格式控制代码format的取值与SET NuMFoRMAT format命令中的相同,详见表5-1。COMPUTE命令用于计算并显示一个中断事件内所有数据行集中的指定列值。当未定义中断事件时,COMPUTER命令失去作用。

5.4 输出格式控制

5.4.1 列格式控制

前面介绍了SQL﹡Plus的SET命令,它所设置的格式影响SQL﹡Plus输出结果中的所有列数据。所以,下面代码用SEql命令将数字型列数据的输出格式设置为“$999”:

SQL>set numf $999

SQL>SELECT ename,deptno FROM emp WHERE sal<1000;

上面语句执行结果如图5-30所示,从中可以看出SET命令设置的格式同时影响SAL和DEPTNO两个数字数列。

img100

图5-30 执行结果

使用SQL*Plus提供的COLUMN命令能够灵活控制指定列的显示属性,而不影响其他列数据的显示格式。COLUMN命令可以设置的列显示属性包括:

列标题文本及其对齐方式。

格式化NIMBER数据显示格式。

分行显示列数据。

COLUMN命令的语法格式为:

COL[UMN][{column│expression}[iption…]]

其中:column和expression:指出COLUMN命令所作用的列或表达式,使用表达式时,它应与SELECT语句中的表达式完全一致。例如,当使用COLUMN命令设置下面语句中co11+co12届示属性时,只将表达式写作“co11+co12”,而不能写为“co12+co11”,或“(co11+co12)”等。

如果不同表中有相同的列名,那么COLUMN所设置的显示属性将同时影响SELECT语句所列出的所有表中的同名列。如果需要分别设置不同表中同名列的显示属性,则应在SELECT语句中为这些同名列指定不同列名,然后在COLUMN命令中使用列别名分别设置各列的显示属性。

当COLUMN命令不带任何选项时,它将列出所有列的当前显示属性。当COLUMN命令后只带column或expression选项时,它将列出指定列或表达式的当前显示属性。

Option:指出COLUMN命令对指定列或表达式所执行的操作,其取值可为:

AIL[AS]alias:为列或表达式指定别名,该别名可用在BREAK、COMPUTE和其他COLUMN命令中。

CLE[AR]:将指定列或表达式的显示屙|生复位为其默认显示属性,执行CLEAR COLUMN命令可以复位所有列的显示属性;

FOLD A[FIER]:显示列标题和每个数据行时,在指定列的后面插入一个换行符。但当指定列为SELECT列表中的最后一列时,COLUMN命令则忽略该选项。例如,下面命令要求SELECT显示时在每行的sal列后插入一个换行符:

SQL>column sal fold_a

SQL>SELECT ename,sal,deptno FROM emp WHERE sal<1000;

其执行结果为图5-31所示。

img101

图5-31 执行结果

FOLD_B[EFORE]:与FOLD_A命令作用相似,但它是在指定列的前面插入换行符,当指定列为SELECT列表中的首列时,SQL*Plus则不再插入换行符;NEWL[INE]:要求在显示指定列标题和列值之前开始一新行,其作用与FOLD-BEFORE相同;FOR[MAT]format:设置列显示格式。对于CHAR、NCHAR、VARCHAR2和NVARCHAR2等数据类型的字符型列,默认列显示方式的左对齐,显示宽度等于数据库中列的定义宽度。使用FORMAT An命令可以将列显示宽度改变为11个字符,如果所指定的列宽度比列标题短时,SQL﹡Plus截断列标题文本。

而LONG、CLOB和NCLOB列的默认显示宽度则由SET LOGCHUNKSIZE或SET LOG命令设置,并取其中较短的一个。如果使用FROMAT An命令修改LONG、CLOB和NCLOB列的显示宽度,SQL*Plus将使用LONGcHuNKsIzE和n之中较短的一个作为列显示宽度。

日期型列的显示宽度也用FORMAT An进行设置列。而对于数字型列,显示格式控制代码format的取值与SET NuMFoRMAT format命令中的相同,详见表5-1。

HEA[DING]text:定义列标题,默认时列标题与列名或列别名相同。当text指定的列标题中包含空格或标点符号时,则应将列标题放在单引号或双引号内。当text中包含列标题分隔符时,SQL﹡Plus将自动从分隔符位置开始换行显示。

JUS[TIFY]{L[EFT]│C[ENTER]│R[IGHT]):设置列标题的对齐方式,LEFT、CENTER和RIGHT三种取值分别将列标题显示方式设置为左对齐、居中和右对齐。默认时,NUMBER型列标题的对齐方式为右对齐,其他数据类型列标题的对齐方式为左对齐。

NOPRI[NT]│PRI[NT]:NOPRINT和PRINT控制SQL﹡Plus是否显示SELECT语句中指定列的列标题和列值。

NU[L]text:使SQL*Plus将指定列中的空值显示为text文本,默认时为空格。例如:

SQL>SELECT ename,comm FROM emp WHERE deptno=10:

执行结果如图5-32所示。

img102

图5-32 执行结果

SQL>column comm null<空>

SQL>/

执行结果如图5-33所示。

img103

图5-33 执行结果

ON/OFF:控制列显示履眭是否受COLUMN命令设置的影响。例如,接着上一个例子执行下面命令,它将关闭column comm null<空>命令设置的列显示格式:

SQL>column comm off

SQL>/

其显示结果如图5-34所示。

img104

图5-34 执行结果

LIKE{expression│alias}:将COLUMN命令为expression或alias列设置的显示属陛拷贝到指定列。在拷贝时,SQL﹡Plus只拷贝当前COLUMN命令未设置的显示属性。例如,在下面一段代码中(黑体部分为输入内容),column co12 like co11 justify left命令将co1l列的列标题拷贝到co12列,而未拷贝co11列标题对齐方式这一显示属性,因为它在当前命令已被重新设置:

SQL>column co11 head columnl

SQL>column co11 justify fight

SQL>column

执行结果如图5-35所示。

img105

图5-35 执行结果

SQL>column col2 like coll justify left

SQL>column

执行结果如图5-36所示。

img106

图5-36 执行结果

5.4.2 报表数据格式控制

常用的SQL﹡Plus报表数据显示格式控制命令为BREAK和COMPUTE。BREAK命令为中断命令,它可在指定列值发生改变时向报表中插入空行,并能够消除报表中重复显示的列值。

COMPUTE命令则按照中断列(BREAK命令所作用列称作中断列)分组计算数据行中某列的列值(包括总和、平均值、最大值最小值等)。

1.BREAK命令

BREAK命令的语法格式为:

BRE[AK][ON{column│expression│ROW│REPORT}[action[action]]]...

其中:

ON子句:说明哪些事件可以触发BREAK命令执行action指定动作,这些事件称作中断事件。中断事件有以下三类:

(1)Column指定列或expression指定表达式的值发生改变。

(2)一行输出结束(BREAKONROW)。

(3)一个报表输出结果(BREAK ON REPORT)。

Action:指出当中断事件发生时SQL*Plus所执行的中断操作,SQL*Plus可执行的中断操作包括:

(1)SK[IP]n:向下跳n行。

(2)SKI[P]:向下跳PAGESIZE行。

(3)NODUP[LICATES]:不再显示重复的中断列值。

(4)DUP[LICATES]:显示重复的中断列值。

BREAK命令中省略action参数时,SQL*Plus不再显示中断列中的重复值,并建立一个位置标识,使SQL*Plus在该位置标识处执行COMPUTE命令指定的计算操作。

当BREAK命令不带任何参数时,它则列出SQL*Plus中当前定义的所有BREAK事件。

执行CLEAR BREAK命令可以清除这些定义。

2.COMPUTE命令

COMPUTE命令用于计算并显示一个中断事件内所有数据行集中的指定列值。当未定义中断事件时,COMPUTER命令失去作用。所以,COMPUTE命令必须与BREAK命令一起使用。COMPUTE命令的语法格式为:

COMP[UTE][function[LAB[IEL]text]...

OFF{expression│column lalias}…

ON{expression│column lalias│REPORT│ROW}…]

其中:

function:指出COMPUTE命令所执行操作的函数名称,可以调用的函数及其作用如表5-4所示。

表5-4 COMPUTE函数

img107

5.4.3 表格式控制

所谓报表格式是指一个查询语句的执行结果,一个报表可以分为一页或多页,报表格式控制每页中显示的行数和标题,以及页眉和页脚等。SQL*Plus命令TTITLE和BTITLE用于在报表和页中添加上、下标题,而REPHEADER和REPFOOTER命令则为报表添加页眉和页脚。

TTITLE、BTITLE和REPHEADER、REPFOOTER命令的语法格式分别为:

{TTI[TLE]│BIT[TLE]}

[printspec[text│variable]…]│[OFF│ON]

{REPH[EADER]l[REPF[OOTER]][PAGE]

[printspec[text│variable]…]│[OFF│ON]

其中:

PAGE:要求SQL*Plus在打印报表的页眉之后和页脚之前换页。

TTITLE和BTITLE命令中ON和OFF分别要求打开和关闭报表或页的上下标题显示功能,而REPHEADER和REPFOOTER命令中ON和OFF则分别要求打开和关闭报表的页眉或页脚显示功能。但它们均不影响上、下标题或页眉和页脚的定义,所以当关闭之后再执行打开时,原来定义的上、下标题或页眉和页脚将立即生效,而不用重新定义。

Text:为所定义的上、下标题或页眉、页脚文本。

Variable:将用户变量或系统维护的以下变量值定义为上、下标题或页眉、页脚文本。

SQL.LNO:当前行号。

SQL.PNO:当前页号。

SQL.RELEASE:当前Oracle软件版本号。

SQL.CODE:当前错误代码。

SQL.USER:当前用户名称。

Printspec:控制上、下标题或页眉、页脚文本的显示位置和格式,其值包括:

COLn:跳到当前行的第n行。

S[KIP][n]:跳到第n个新行的开始,n等于0时则跳到当前行的开始。默认时n等于1。

TAB n:向前(n大于0)或向后(11小于0)跳n列。

LE[FT]、CE[NTER]、R[IGHT]:以左对齐、居中或右对齐方式显示,直到printspec结束,或者是遇到下一个LEFT、CENTER、RIGHT、COL命令时为止。

BOLD:用粗体显示。

FORMAT text:定义显示格式控制符,控制其后数据显示格式,直至遇到下一个FORMAT子句或是命令结束为止。格式控制符text的定义方法与COLUMN FORMAT命令中的格式定义方法相同,这里不再介绍。

当TTITLE、BTITLE、REPHEADER和REPFOOTER命令后不带任何参数时,它们则分别列出SQL*Plus中当前定义的报表上、下标题或页眉、页脚文本。

下面例子说明怎样使用TTITLE、BTITLE、REPHEADER和REPFOOTER命令建立报表,它在首页中显示报表名称、页眉、制作单位等,之后各页显示报表数据。其中使用FORMAT格式化页号显示格式:

SQL>SELECT*FROM dept

2

SQL>TTITLE CENTER‘部门信息列表’RIGHT第FORMAT 9 SQL.PNO 页

SQL>BTITLE CENTER‘XXX公司’

SQL>REPHEADER PAGE CENTER‘SQL*Plus报表制作演示’

SQL>REPFOOTER SKIP 2 LEFT SQL.USER‘编制

SQL>SET PAGESIZE 13

SQL>/

上面例子执行结果如图5-37所示。

img108

图5-37 执行结果

5.4.4 格式化的清除

为了清除对某个列进行的自定义格式,可以使用CLEAR选项。为了关闭列特性(characteristics),可以使用OFF选项。如果又想使用ON选项,下面是示例:

SQL>COLUMN COMMENTS OFF

SQL>COLUMN COMMENTS ON

SQL>COLUMN COMMENTS CLEAR

SQL>COLUMN COMMENTS

执行结果如图5-38所示。

img109

图5-38 执行结果

CLEAR命令可以用来清除应用到一些列上的格式化处理、清除断行设置和计算、清屏或者清除SQL缓冲区。下面是示例:

SQL>CLEAR BREAKS

SQL>CLEAR COLUMNS

SQL>CLEAR BUFFER

SQL>CLEAR COMPUTES

执行结果如图5-39所示。

img110

图5-39 执行结果

SQL>CLEAR SCREEN

该命令用来清屏,类似于DOS下的CLS命令,执行结果如图5-40所示。

img111

图5-40 执行结果

下列命令将关闭标题、页眉和页脚的显示:

SQL>TTITLE OFF

SOL>BTITLE OFF

SQL>REPHEADER OFF

SQL>REPFOOTER OFF

执行结果如图5-41所示。

img112

图5-41 执行结果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈