今天接着昨天的RUN命令继续讲。
设想,你输入了例3-10的查询语句
例 3-10
SQL> SELECT ename 2 FROM emp;
例 3-10 结果
看到以上输出时,您发现在SELECT子句中忘了job,sal。这时您又如何修改您的SELECT子句呢?首先您应该使用SQL*PLUS的L(LIST)命令来显示SQL缓冲中的内容。
例 3-11
SQL> L
例 3-11 结果
在例3-11显示的结果中,2后面的“*”表示第二行为当前行。从例3-11显示的结果发现 SELECT ename是SQL缓冲区中的第一行。为了在ename之后添加“,job,sal”您应该把第一行设置为当前行。于是输入1,如例3-12,该命令把第一行置为当前行。
例 3-12
SQL> 1
例 3-12 结果
例3-12显示的结果表明已成功将SQL缓冲区第一行设置为当前行。现在就可以使用例3-13的a命令(附加命令)把“,job,sal”添加到SELECT ename之后。
例 3-13
SQL> a,job,sal
例 3-13 结果
此时您应该再使用例3-14的L命令,来检查您所做的修改是否正确
例 3-14
SQL> L
例 3-14 结果
看到了例3-14显示的结果,您发现修改后的查询语句正是您所希望的,于是您再一次输入执行命令(/或R)来重新运行SQL缓冲区中的查询语句。这次您就可以得到您所需要的结果了,如例3-15
例 3-15
SQL> R
例 3-15 结果
这与我们输入SQL语句后立即执行所得的结果完全相同。
用n来指定第n行为当前行,这里的n为自然数。那么如果你想在第一行之前插入一行数据,又该怎么办呢?可以使用0 text在第一行之前插入一行数据。
如果发现SQL缓冲区中某行的内容需要去掉,又该怎么处理呢?
可以使用del n删除第n行。如果没有指定n 就是删除掉当前行。也可以使用del m,n命令删除从m行到n行的所有内容。为了演示如何使用这个SQL*PLUS命令,您可以重新输入与例3-5几乎一样的如例3-16的SQL语句。
例 3-16
SQL> SELECT empno,ename,job,sal 2 FROM emp 3 WHERE sal >= 1500 4 ORDER BY job,sal DESC;为了准确的确定所要删除的行号,您可以再次使用例3-17的SQL*PLUS命令。
例 3-17
SQL> L
例 3-17 结果
假设emp表是一个很大的表,为了提高查询的效率,您决定去掉ORDER BY 子句,可以使用例 3-18的SQL*PLUS命令来完成这一决定。
例 3-18
SQL> del 4
现在还是应该使用例3-19的SQL*PLUS的L命令来检查一下您所做的操作是否成功。
例 3-19
SQL> L
例 3-19 结果
例3-19显示的结果表名已经成功的删除了SQL缓冲区中包含ORDE BY 子句的第四行。此时,您可以再次使用例3-20的SQL*PLUS的“/”命令运行该句。
例 3-20
SQL> /
例 3-20 结果
很显然例3-20显示的结果是无序的,其易读性也下降了。但是有时为了系统的整体效率,牺牲一些查询结果的易读性也是在所难免。这也就像社会上常说的“牺牲小家为大家”一样。
在这里我们并没有给出del m,n命令和del 命令的例子,因为他们的用法与del m命令大同小异。如果读者甘心去可以自己试一试就行。
除了以上所介绍的修改和删除命令之外,还有没有其他的SQL*PLUS的命令来完成相关的操作呢?
也可以使用C(HANGE)/原文/新的命令来修改SQL缓冲区中的语句。是在当前行中用“新的正文”替代“原文”。
为了演示该命令的用法,您可以重新输入与例3-5完全相同的SQL语句,如例3-21.
例 3-21
SQL> SELECT empno,ename,job,sal 2 FROM dept 3 WHERE sal >= 1500 4 ORDER BY job,sal DESC;
例 3-21 结果
现在试着用刚刚学过的C[HANGE]命令将SQL缓冲区中第二行的dept改为emp,使用了如例2-22的SQL*PLUS命令。
例 3-22
SQL> c /dept/emp
例 3-22 结果
例3-22显示的结果是您感到意外。因为您有惊人的记忆力,所以坚信您所输入的SQL*PLUS命令没有任何错误。实际上例3-22的SQL*PLUS命令是完全正确的,只是当前行并不是第二行,即不包含dept,所以才造成了“未找到字符串”的错误。现在您可以先输入例3-23的SQL*PLUS命令将SQL缓冲区的中第二行设置为当前行。
例 3-23
SQL> 2
例 3-23 结果
之后可以重新输入与例2-22完全相同,如例2-24的SQL*PLUS命令。
例 3-24
SQL> c /dept/emp
例 3-24 结果
例3-24显示的结果表名您已经成功地将SQL缓冲区中第二行的dept修改为emp。但为了谨慎起见,您还是应该使用例3-25的L命令来验证一下。
例 3-25
SQL> L
例 3-25 结果
如果这时您再使用例3-26 的“/”命令,您就会得到与例3-9完全相同的结果。
例 3-26
SQL> R
例 3-26 结果
如果您想输出的记过只按工资(sal)由大小排序,您首先应该使用例3-27的SQL*PLUS命令将SQL缓冲区中第四行设置为当前行。
例 3-27
SQL> 4
例 3-27 结果
之后就可以使用例3-28 的C命令将job从SQL缓冲区第四行中删去。
例 3-28
SQL> C /job,/
例 3-28 结果
现在应该再使用例 3-29的L命令来验证一下修改是否成功了。
例 3-29
SQL> L
例 3-29 结果
最后您可以使用例3-30的/命令来运行缓冲区中的语句。
例 3-30
SQL> /
例 3-30 结果
从本节的讨论可以看出,在某些情况下使用C命令进行修改或者删除操作可能比使用其他的命令更方便。
为了演示乘生成脚本文件,可以重新输入例3-31的查询语句。
例 3-31
SQL> SELECT empno,ename,job,sal 2 FROM emp 3 WHERE sal >= 1500 4 ORDER BY job,sal DESC;
例 3-31 结果
现在您可以输入如例 3-32的SQL*PLUS的命令,将SQL缓冲区的语句存入D:\SQL\SAMPLE.sql文件中,该文件也叫脚本文件。
注意:在执行SQL×PLUS命令之前,您要先是用系统命令来创建D:\SQL目录(问价夹),意思就是SQL*PLUS命令不会自动为您创建不存在的文件夹。
例 3-32
SQL> SAVE D:\SQL\SAMPLE
例 3-32 结果
SAVE命令把SQL缓冲区的内容存入指定的文件,这个文件叫做脚本文件。此时如果您使用正文编辑器打开文件D:\SQL\SAMPLE.sql,您会在文件中看到如下内容
例 3-33
测试剐实行SQL×PLUS的L命令,您将会看到您以前输入的SQL语句不是SQL*PLUS的命令SAVE D:\SQL\SAMPLE。这说明,SQL*PLUS的命令不被存入SQL缓冲区。请看例3-34.
例 3-34
SQL> L
例 3-34 结果
现在如果您输入例3-35的SQL语句,会发现在SQL缓冲区中会有哪些变化呢?
例 3-35
SQL> SELECT * 2 FROM dept;
例 3-35 结果
之后再发例3-36的SQL*PLUS的L命令,您会发现SQL缓冲区寸的内容已经变为刚才输入的语句。
例 3-36
SQL> L
例 3-36 结果
以上的例子也证明 了SQl缓冲区只能存储一个SQL语句。
------------------------------------------分割线---------
今天是周日,多学习一些。^_^
-----------------------------------------------------------
上一篇:oracle学习 第三章 常用的SQL*PLUS命令 ——01
下一篇: