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.6 查询dba_users表
图 14.7 追加排序语句
运行追加命令后,会出现追加后的一条完成语句,之后在SQL>命令符后面输入“/”,即可运行该语句。查询结果如图14.8所示。
图 14.8 排序后的查询结果
从排序后的查询结果可以看出,结果已经按照username进行排序了。
(2)替换文本
在编辑时,有时需要对原有的语句进行更改,这时SQL*Plus就提供了文本替换的方法。语句如下:
Change/old text/new text
【语法说明】
❑old text:被替换字符串中原来的内容。
❑new text:要替换的新内容。
【示例2】替换文本
下面就利用上面的语句实现语句的替换。在查询dba_users时,把查询用户的ID替换成查询用户的密码(PASSWORD)。操作结果如图14.9所示。
图 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.10 删除指定行
从图14.10中可以看出,在执行完插入语句向表test中插入语句后,如果删除了第二行,那么使用“/”再次执行该语句时就可以发现缺少了第二个语句。也就是在SQL*Plus中使用删除命令指的是删除在缓存中的语句。
❑删除缓冲区中全部的语句
删除缓冲区中全部语句的命令如下:
CLEAR BUFFER
该语句是删除缓冲区的全部内容。
【示例4】删除缓冲区中全部内容
利用上面的语句,在执行增加一条数据的语句之后,删除缓冲区,然后再使用“/”。具体效果如图14.11所示。
图 14.11 删除缓冲区中全部语句
在删除缓冲区的内容之后,再次用“/”执行语句时,就会显示缓冲区中没有可运行的程序。这就说明了删除缓冲区的操作成功。
(4)添加行
在编辑语句时,除了删除和替换之外,常用的操作还有添加操作。添加行的操作是通过INPUT命令实现的,添加行的操作也是指在缓冲中执行过的语句中增加。具体语句如下:
INPUT text
【示例5】添加一条语句
下面就利用添加行的语句完成在执行完查询dba_users语句之后,再添加一个排序语句的功能。执行查询dba_users的用户名和用户ID操作的结果如图14.6所示,使用INPUT语句添加按用户名排序后,结果如图14.12所示。
图 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.13 查询缓冲区中全部内容
【示例7】查询缓冲区中第二行内容和最后一行内容
查询缓冲区中第二行内容使用LIST n这个命令结构,查询缓冲区中最后一行内容使用LIST LAST命令。具体查询结果如图14.14所示。
图 14.14 查询缓冲区中第二行内容和最后一行内容
上面所讲的编辑命令全部要在SQLPlus中使用,如果想在记事本中编辑SQLPlus中缓冲区的内容,则在SQLPlus窗口中使用"ed"命令,就可以直接调出记事本进行缓冲区内容的编辑,编辑完成后关闭记事本后即可回到SQLPlus中。