目录
设置 SQL *Plus 运行环境
1、set 命令基本语法
2、使用 SET 命令设置运行环境
1)、pagesize 变量
2)、newpage 变量
3)、linesize 变量
4)、pause 变量
5)、numformat 变量
常用 SQL *Plus 命令
1、help 命令
2、describe 命令
3、spool 命令
4、其他常用命令
1)、define 命令
2)、show 命令
3)、edi [t] 命令
4)、save 命令
5)、get 命令
6)、start 和 @ 命令
格式化查询结果
1、column 命令
1)、format 选项
2)、heading 选项
3)、null 选项
4)、on | off 选项
5)、wrapped / word_wrapped 选项
2、ttitle 和 btitle 命令
SQL * Plus 是一个被系统管理员 (DBA)和开发人员广泛使用的功能强大而且很直观的 Oracle 工具,也是一个可以通用在各种平台上且操作几乎完全一致的工具。SQL * Plus 可以执行输入的 SQL 语句和包含 SQL 语句的文件和 PL/SQL 语句,通过 SQL *Plus 可以与数据库进行对话。
SQL * Plus 是一个基于 C/S 两层结构的客户端操作工具,包括客户层(即,命令行窗口)和服务器层(即数据库实例),这两层既可以在一台主机上,也可以在不同主机上。SQL *Plus 是一个非常重要的操作 oracle 数据库的实用工具,后面我们讲的关于 SQL 和 PL/SQL 的示例大多都是在 SQL *Plus 环境下进行演示的。
SQL *Plus 的运行环境是用来输入、执行 SQL *Plus 命令和显示返回结果的场所,设置合适的 SQL *Plus 运行环境可以使 SQL *Plus 能够按照用户的要求运行和执行各种操作。set 命令也称 set 变量或维护系统变量,利用它可为 SQL *Plus 交互建立一个特殊的环境,如设置屏幕上每一行能够最多显示字符数、设置每页打印的行数、设置某个列的宽度等。下面对 set 命令进行详细讲解。
在 Oracle 中,用户可以使用 set 命令来设置 SQL *Plus 的运行环境,set命令的语法格式为:set system_variable value ;其参数说明为:system_variable :变量名,value :变量值 。其常用的变量名、可选值及其说明如下表:
array [size] | 20(默认值) | n | 设置一批的行数,是 SQL *Plus 一次从从数据库获取的函数,有效值为 1~5000.大的值可提高查询和子查询的有效性,可获取许多行,但也需要更多的内存。当超过1000时,其效果不大 |
newp [age] | 1(默认值) | n | 设置一页中空行的数量,默认值为 1 |
numf [ormat] | 格式 | 设置显示数值的缺省格式,该格式是数值格式 |
pages [ize] | 14(默认值) | n |
设置从顶部标题至页结束之间的行数 |
pau [se] | off(默认值) | on | text | 设置 SQL *Plus 输出结果是否滚动显示,当设置为 on 时,表示输出结果的每一页都暂停,用户按回车键后继续显示 |
show [mode] | off(默认值) | on | 控制 SQL *Plus 在执行 set 命令时是否列出其新老值 old 或 new 的设置,on 表示列出新老值 |
spa [ce] | 1(默认值) | n | 设置输出列之间空格的数目,其最大值为 10 |
sqlco [ntinue] | >;(默认值) | 文本 | 在一附加行上继续某个 SQL *Plus 命令时,SQL *Plus 以该设置的字符串列进行提示。若为 on 则提示行号,off 提示设置为 sqlprompt 的值 |
ti [me] | off(默认值) | on | 控制当前日期显示,若为 on 时则在每条命令提示前显示当前时间,若为off则禁止时间的显示 |
timi [ng] | off(默认值) | on | 控制时间统计的显示,若为 on ,则显示每一个运行的 SQL 命令或 PL/SQL 块的时间统计;若为 off ,则禁止每一个命令的时间统计 |
und [erline] | -(默认值) | off | on(默认值) | 设置用在 SQL *Plus 报表中下划线列标题的字符,on 或 off 将下划线置成开或关状态 |
ver [ify] | off | on(默认值) | 控制 SQL *Plus 用值替换前、后是否列出命令的文本。on 表示显示文本 |
lin [esize] | 80(默认值) | n | 设置 SQL *Plus 在一行中显示的最多字符总数,它还控制在 ttitle 和 btitle 中对准中心的文本和右对齐文本 |
需要注意的是,通过 set 命令设置的环境变量是临时的,不是永久的,当用户退出 SQL *Plus 环境后,用户设置的环境参数会全部丢失。
这里针对在 Oracle 操作过程中经常用到的几个变量选项及其实例应用进行详细讲解。
该变量是用来设置从顶部标题至页结束之间的行数,其语法格式如下: set pagesize value ; value 变量的默认值是14,根据实际情况的需要,用户可以修改 value 的值,该值是一个整数,当 SQL *Plus 返回查询结果时,它首先会显示用户所选择数据的列标题,然后在相应列标题下显示数据行,上下两个列标题所在行之间的空间就是 SQL *Plus 的一页。一页中所显示的数据行的数量就是 pagesize 变量的值,若要查看当前 SQL *Plus 环境中的一页有多少行,可以使用命令 show pagesize 命令。
注意:不要把当前窗口区域内能够显示的行数看作是 SQL *Plus 环境中一页的行数,一页的行数由 pagesize 变量值来决定。另外一页内的数据行包括两个列标题之间的数据行、上面的一个列标题、分割线和空行。
该变量用来设置一页中空行的数量,其语法格式如下: set newpage value ; value 的默认值为 1 ,根据实际情况的需要,用户可以修改 value 的值,该值是一个整数。
该变量用来设置在 SQL *Plus 环境中一行所显示的最多字符总数,其语法格式如下:set linesize value ; value 的默认值为 80 ,根据实际情况的需要,用户可以修改 value 的值,该值是一个整数。
如果数据行的宽度大于 linesize 变量的值,当在 SQL *Plus 环境中按照 linesize 指定的数量输出字符时,数据就会发生折行显示的情况。如果适当调整 linesize 的值,使其值等于或稍大于数据行的宽度,则输出的数据就不会折行,所以在实际操作 Oracle 数据库的过程中,要根据具体情况来适当调整 linesize 的值。
该变量用来设置 SQL *Plus 输出结果是否滚动显示,其语法格式如下: set pause value 。 value 变量值有以下三种情况:off 是默认值,返回结果一次性输出完毕,中间的每一页不会暂停;on 表示输出结果的每一页都暂停,用户按后回车键后继续显示;text 表示在设置 pause 的值为 on 之后,若再设置 text 的值,则每次暂停都将显示该字符串,当 pause 的值为 off 时,设置 text 值没有任何意义。
当在 SQL *Plus 环境中显示多行数据时,并且一页无法容纳下这么多数据行,如果 pause 变量值为 off 时,则 SQL *Plus 窗口输出的数据行会快速滚动,非常不利于用户查看。这就需要数据行在滚动时最好能够按页暂停,以便于用户逐页地查看输出结果。当把按回车键后才继续显示下一页。另外,在设置 pause 变量值为 on 之后,还可以通过 pause 变量设置暂停后显示的字符串,以便于提示用户操作。
当不再需要按页暂停时,可以使用 “set pause off” 命令取消显示结果的暂停功能,同时屏幕上不再有 “提示字符串” 输出。
该变量是用来设置显示数值的缺省格式,该格式是数值格式,其语法格式如下:set numformat format ; format 为数值的掩码,数值的常用掩码及其说明如下:
掩码 | 说明 | 举例 |
9 | 查询结果中数字替换格式中的掩码 | 999 |
0 | 格式中的掩码屏蔽掉查询结果中的数字 | 999.00 |
$ | 在查询结果中的数字前添加美元前缀 | $999 |
S | 为数字显示符号类型,通常用于显示查询结果中的正负数字 | S999 |
, | 在字符 “ ,” 位置上放置逗号 | 999,99 |
当用户查询数据中的数值时,SQL *Plus 环境将使用默认的格式显示数值,即以 10 个字符的宽度和常规格式来显示数字。
SQL *Plus 工具提供了许多操作 Oracle 数据库的命令,并且每个命令都有很多选项,把所有命令的选项都记住,这对于用户来说非常困难。为了解决这个难题,SQL *Plus 提供了 help 命令来帮助用户查询指定命令的选项。help 可以向用户提供被查询命令的标题、功能描述、缩写形式和参数选项(包括必选参数和可选参数)等信息。其语法格式如下:help |? [ topic ] ,? 表示一个命令的部分字符,这样就可以通过命令的部分字符以模糊查询的方式来查询命令格式; topic 参数表示将要查询的命令的完整名称,若省略 “?” 和 “topic” 参数,则直接执行 help 命令,输出 help 命令本身的语法格式及其功能描述信息。
若用户无法记清所要使用的 SQL *Plus 命令,则可以使用 help index 命令来查看 SQL *Plus 命令清单,即 help index;
在 SQL *Plus 的众多命令中,describe 命令可能是被使用的最频繁的一个,它用来查询指定数据对象的组成结构,例如可以通过该命令查询表和视图的结构,查询结果就可以列出其各个列的名称,是否为空及类型等属性。其语法格式为:desc [ribe] object_name ; describe 可以缩写为 desc ,object_name 表示将要查询的对象名称。
特别注意:另外在下面的情况中也可以使用:在 SQL *Plus 中敲了很长的命令后,突然发现想不起某个列的名字了,如果取消当前的命令,待查询后再重敲是非常麻烦的事,这里就可以使用 “ #desc object_name ” 的命令格式来随时查看数据对象的结构,之后继续进行编写。如:
describe 命令不仅可以查询表、视图的结构,而且还可以查询过程、函数和程序包等 PL/SQL 对象的规范。
spool 命令可以把查询结果输出到指定文件中,这样可以保存查询结果并方便打印,其语法格式为:
spo [0l] [file_name[.ext] [cre[ate] | rep[lace] | app[end]] | off | out ]
其中参数 file_name 用于指定脱机文件的名称,默认的文件扩展名为 lst ,在该参数后面可以跟一个关键字,该关键字有以下几种情况:cre [ate] 表示创建一个新的脱机文件,这也是 spool 命令的默认状态;rep [lace] 表示代替已经存在的脱机文件; app [end] 表示把查询结果附加到一个已经存在的脱机文件中; off | out 表示关闭 spool 输出。
该程序的执行结果是:从 spool 命令开始(但不包括该命令行),一直到 spool off 命令行(包括该命令行)之间的所有内容都被写入 emp.txt 文件中。如:
另外只有使用 spool off 或 spool out 命令关闭输出,才会在输出文件中看到输出的内容,否则输出文件中无内容或无更新内容。
出了上面几个最常用的命令之外,还有一些比较常用且非常简单的 SQL *Plus 命令,下面做一下简单的介绍。
该命令用来定义一个用户变量并且可以分配给它一个 char 值,其语法格式为: def [ine] [variable] | [variable=text] ; variable 表示定义的变量名,text 表示变量的 char 值。
该命令用来显示 SQL *Plus 系统变量的值或 SQL *Plus 环境变量的值,其语法格式为: sho [w] option ; option 表示要显示的系统选项,常用的选项有 all、parameters [parameter_name]、sga、spool、user 等。
例:使用 show 命令显示当前数据库实例的数据块大小:
SQL 语句或 PL/SQL 块执行完毕后,可以被存储在一个被称为 SQL 缓冲区的内存区域中,用户可以从 SQL 缓冲区中重新调用、编辑或运行那些最近输入的 SQL 语句,若要编辑 SQL 缓冲区中的最近一条 SQL 语句或 PL/SQL 块,即可以在 SQL *Plus 环境中直接编辑,也可以使用 edit 命令实现在记事本中编辑。edit 命令用来编辑 SQL 缓冲区或指定磁盘文件中的 SQL 语句或 PL/SQL 块,其语法格式为: ed [it] [file_name[.ext]] ,file_name 表示要编辑的磁盘文件名。
若在 SQL *Plus 中只输入 “edit” 命令而不制定 file_name 参数的值,则表示编辑 SQL 缓冲区中最近一条 SQL 语句或 PL/SQL 块。执行 edit 命令后,SQL *Plus 工具将打开一个包含有 sql 语句或 PL/SQL 块的记事本,用户可以在记事本环境下编辑 SQL 语句或 PL/SQL 块。
例如打开刚才的那个文件:
该命令实现将 SQL 缓冲区中的最近一条 SQL 语句或 PL/SQL 块保存到一个文件中,其语法格式为: save file_name ;参数 file_name表示要保存的文件名,如果不为保存的文件指定路径,则该文件会保存在 Oracle 系统安装的主目录中(但不建议这样做)。如果不为保存的文件指定扩展名,则默认扩展名为 SQL ,即保存的文件为一个 SQL 脚本文件。
注意该命令和上面 spool 命令一样,所创的文件需和安装位置处于同一个磁盘,另外如果要清空 SQL 缓冲区中的内容,可以使用 clear buffer 命令。
该命令实现把一个 SQL 脚本文件的内容放进 SQL 缓冲区,其语法格式为:get [file] file_name[.ext] [list | nolist] ; 其中 file_name 表示要检索的文件名,如果省略了文件的扩展名,则默认文件的扩展名为 SQL ;list 表示指定文件的内容加载到缓冲区时显示文件的内容;nolist 表示指定文件的内容加载到缓冲区时不显示文件的内容。
执行 get 命令时,如果 file-name 参数不包括被检索文件的路径,则 SQL *Plus 工具会在 Oracle 系统安装的主目录下检索指定文件。在 SQL *Plus 找到指定文件后,会把文件中的内容加载到 SQL *Plus 缓冲区,并显示该文件的内容。
这两个命令都可以用来执行一个 SQL 脚本文件,它们的语法格式如下:
sta [rt] { url | file_name[.ext] } [arg ...];
@ { url |file_name[.ext] } [arg ...];
其中 url 表示要执行的 SQL 脚本文件的路径,file_name 表示包含 SQL 脚本的文件名,arg 则为其他参数。有下面一个例子:先创建一个文本文档(需要和 Oracle 安装位置同处一个磁盘下),并在其中写入 sql 语句,如:
下面用 start 命令执行该 SQL 脚本的 emp.txt 文件:
上面的代码若使用 “ @ d:\emp.txt ” 命令可以得到同样的结果。
为了在 SQL *Plus 环境中生成符合用户需要规范的报表,SQL *Plus 工具提供了多个用于格式化查询结果的命令,使用这些命令可以实现设置列的标题、定义输出值的显示格式和显示宽度、为报表增加头标题和底标题、在报表中显示当前日期和页号等。下面对常用的格式化命令进行讲解。
该命令可以实现格式化查询结果、设置列宽度、重新设置列标题等功能,其语法格式为: col [umn] [column_name | alias | option ]; 其中 column_name 表示用于指定要设置的列的名称,alias 用于指定列的别名,通过它可以把英文列标题设置为汉字,option 用于指定某个列的显示格式,option 选项的值及其说明如下表:
option 选项的值 | 说明 |
clear | 清除指定列所设置的显示属性,从而回复列使用默认的显示属性 |
format | 格式化指定的列 |
heading | 定义列标题 |
justify | 调整列标题的对齐方式。默认数值类型列为右对齐,其他类型为左对齐 |
null | 指定一个字符串,如果列的值为 null ,则由该字符串代替 |
print / noprint | 显示列标题或隐藏列标题,默认为 print |
on | off | 控制定义的显示属性的状态,off 表示定义的所有显示属性都不起作用,默认为 on |
wrapped | 当字符串的长度超过显示宽度时,将字符串的超出部分折叠到下一行显示 |
word_wrapped | 表示从一个完整的字符处折叠 |
truncated | 表示截断字符串尾部 |
如果在关键字 column 后面未指定任何参数,则 column 命令将显示 SQL *Plus 环境中所有列的当前定义属性,如果在 column 后面指定某个列名,则显示指定列的当前定义属性。下面对表中的一些常用 option 选项值进行举例说明。
该选项用于格式化指定的列,需要在 format 关键字的后面跟一个掩码格式。
该选项用于定义列标题,例如许多数据表或视图的列名都为英文形式,可以使用选项将英文形式的列标题显示为中文形式。
在该选项的后面指定一个字符串,如果列的值为 null ,则用该字符串代替空值。
该选项用于控制定义的显示属性的状态,off 表示定义的所有显示属性都不起作用,默认为 on。
这两个选项都用于实现折行的功能, wrapped 选项按照指定长度折行,word_wrapped 选项按照完整字符串折行。
例:使用 wrapped 选项实现按照指定长度折行,代码及运行结果如下:
例:使用 word_wrapped 选项按照完整字符串折行,代码及运行结果如下:
在 SQL *Plus 环境中,执行 SQL 语句后的显示结果在默认情况下包括列标题、页分割线、查询结果和行数合计等内容,用这些默认的输出信息打印报表,并不十分美观。如果能为整个输出结果设置报表头(即头标题)。为每页都设置页标题和页码、为整个输出结果设置报表尾(如打印时间或打印人员),那么使用这样的输出结果打印报表一定非常美观。为了实现这些功能, SQL *Plus 工具提供了 ttitle 和 btitle 命令,这两个命令分别用来设置打印时每页的顶部和底部标题。
ttitle 命令的语法为: tti [tle] [printspec [text | variable ] ...] | [off | on] ; 其中 text 用于设置输出结果的头标题(即报表头文字),variable 用于在头标题中输出相应的变量值,off 表示禁止打印头标题,on 表示允许打印头标题,printspec 用来作为头标题的修饰性选项,printspec 选项的值及其说明如下表:
printspec 选项的值 | 说明 |
col | 指定在当前行的第几列打印头标题 |
skip | 跳过从下一行开始的第几行,默认为1 |
left | 在当前行中左对齐打印数据 |
center | 在当前行中间打印数据 |
right | 在当前行中右对齐打印数据 |
bold | 以黑体打印数据 |
btitle 的语法格式与 ttitle 的语法格式相同。如果在 ttitle 或 btitle 命令后没有任何参数,则显示当前的 ttitle 或 btitle 的定义 。
上面例子中,头标题 “销售情况表” 是一个固定的字符串,我们也可以用变量来输出。
上面代码中所设置的头标题和底标题的有效期直到本次会话结束后才终止。若要手动清除这些设置,可以分别使用 ttitle off 命令 和 btitle off 命令取消头标题和底标题的设置信息。