14.2 使用SQL*Plus

前面已经讲解过如何启动SQLPlus,本节主要讲解SQLPlus的编辑、保存、运行以及格式化查询结果的操作。

14.2.1 使用SQL*Plus编辑命令

在SQLPlus中所做的工作就是输入不同语句完成不同的操作结果,这在输入语句时就要用到SQLPlus中的编辑功能。学习SQL*Plus的编辑功能之后,就可以方便输出结果的显示以及输入SQL语句。

在学习编辑命令之前首先要知道如何在SQLPlus中运行语句。运行语句是比较简单的,只要在SQLPlus中的SQL>提示符后输入语句,按【Enter】键即可运行。同时,如果要运行上一次输入的语句,直接按键盘上的“/”键即可。

(1)追加文本

在执行完一个语句之后,需要在上一个语句的基础上增加一些内容时,可以使用追加文本的命令完成操作。具体语法如下:


Append text;


其中,text就是要追加的文本。

【示例1】查询dba_users表,追加排序语句

先查询表中用户名(username)和用户ID(user_id)字段,查询结果如图14.6所示。从此图显示的查询结果中可以看出,username并没有按顺序,下面使用追加命令向该语句追加一个按username排序的语句。操作结果如图14.7所示。

14.2 使用SQL*Plus - 图1

图 14.6 查询dba_users表

14.2 使用SQL*Plus - 图2

图 14.7 追加排序语句

运行追加命令后,会出现追加后的一条完成语句,之后在SQL>命令符后面输入“/”,即可运行该语句。查询结果如图14.8所示。

14.2 使用SQL*Plus - 图3

图 14.8 排序后的查询结果

从排序后的查询结果可以看出,结果已经按照username进行排序了。

(2)替换文本

在编辑时,有时需要对原有的语句进行更改,这时SQL*Plus就提供了文本替换的方法。语句如下:


Change/old text/new text


【语法说明】

❑old text:被替换字符串中原来的内容。

❑new text:要替换的新内容。

【示例2】替换文本

下面就利用上面的语句实现语句的替换。在查询dba_users时,把查询用户的ID替换成查询用户的密码(PASSWORD)。操作结果如图14.9所示。

14.2 使用SQL*Plus - 图4

图 14.9 替换user_id为password

说明 如果在替换时,只输入原来的字符串而没有输入新的字符串,相当于把原来的字符串删除。例如,在上面的例子中把USER_ID替换成PASSWORD,如果没有输入PASSWORD,那么替换的语句如下:


change/user_id/;


那么替换后的语句就成为:


select username,from dba_users


(3)删除命令

在SQLPlus中编辑语句时,不可缺少的就是删除命令。那么在SQLPlus中都提供了哪些删除命令呢?主要有删除当前行,指定要删除的行数以及删除行的范围等命令。下面讲解在SQL*Plus中比较常用的删除命令。

❑删除指定行

删除指定行,是指在执行完命令时,如果要删除某一行后再次执行时,可以使用该命令。具体命令如下:


DEL n


这里n代表要删除的行数。

【示例3】删除一行语句

下面就利用DEL命令删除输入到SQL*Plus中的一行语句。具体操作如图14.10所示。

14.2 使用SQL*Plus - 图5

图 14.10 删除指定行

从图14.10中可以看出,在执行完插入语句向表test中插入语句后,如果删除了第二行,那么使用“/”再次执行该语句时就可以发现缺少了第二个语句。也就是在SQL*Plus中使用删除命令指的是删除在缓存中的语句。

❑删除缓冲区中全部的语句

删除缓冲区中全部语句的命令如下:


CLEAR BUFFER


该语句是删除缓冲区的全部内容。

【示例4】删除缓冲区中全部内容

利用上面的语句,在执行增加一条数据的语句之后,删除缓冲区,然后再使用“/”。具体效果如图14.11所示。

14.2 使用SQL*Plus - 图6

图 14.11 删除缓冲区中全部语句

在删除缓冲区的内容之后,再次用“/”执行语句时,就会显示缓冲区中没有可运行的程序。这就说明了删除缓冲区的操作成功。

(4)添加行

在编辑语句时,除了删除和替换之外,常用的操作还有添加操作。添加行的操作是通过INPUT命令实现的,添加行的操作也是指在缓冲中执行过的语句中增加。具体语句如下:


INPUT text


【示例5】添加一条语句

下面就利用添加行的语句完成在执行完查询dba_users语句之后,再添加一个排序语句的功能。执行查询dba_users的用户名和用户ID操作的结果如图14.6所示,使用INPUT语句添加按用户名排序后,结果如图14.12所示。

14.2 使用SQL*Plus - 图7

图 14.12 排序后的结果

在原来查询语句select username,user_id from dba_users后面添加了order by username,使用“/”执行语句,结果就是排序后的结果,说明添加语句操作成功,也可以根据自己的需要,添加多行语句。

说明 使用append追加命令与input添加命令的区别就是,append是在缓冲区中最后一条语句后面添加内容,而input是添加行的对象,虽然也是在缓冲区执行的语句中添加,但是当缓冲区中没有语句时,使用input之后就相当于在缓冲区中写入了第一行语句。这是要特别注意的。

(5)显示缓冲区中的内容

在SQLPlus执行语句后内容会保存在缓冲区中,如果要查询缓冲区中的内容,SQLPlus提供了LIST命令完成查询操作。使用LIST命令可以查询出全部缓冲区的内容,也可以查询出指定行数的内容。LIST命令的具体语法如下:


LIST[n/LAST/]


这里,在LIST后面如果省略后面的参数就代表查询缓冲区全部的内容;n代表显示缓冲区中指定行的内容;LAST代表查询出缓冲区中最后一行语句。

下面利用LIST语句分别完成查询缓冲区中全部内容、查询第二行内容、查询最后一行内容的操作。

【示例6】查询缓冲区中全部内容

首先清空缓冲区中的全部内容,然后在缓冲区中使用建表语句创建一个表listtest并执行。使用LIST语句查询缓冲区中全部内容的操作如图14.13所示。

14.2 使用SQL*Plus - 图8

图 14.13 查询缓冲区中全部内容

【示例7】查询缓冲区中第二行内容和最后一行内容

查询缓冲区中第二行内容使用LIST n这个命令结构,查询缓冲区中最后一行内容使用LIST LAST命令。具体查询结果如图14.14所示。

14.2 使用SQL*Plus - 图9

图 14.14 查询缓冲区中第二行内容和最后一行内容

上面所讲的编辑命令全部要在SQLPlus中使用,如果想在记事本中编辑SQLPlus中缓冲区的内容,则在SQLPlus窗口中使用"ed"命令,就可以直接调出记事本进行缓冲区内容的编辑,编辑完成后关闭记事本后即可回到SQLPlus中。