oracle学习 第三章 常用的SQL*PLUS命令 ——02

今天接着昨天的RUN命令继续讲。

3.5 n(设置当前行)命令和A(PPEND)(附加)命令

设想,你输入了例3-10的查询语句

例 3-10

SQL> SELECT ename
  2  FROM emp;

例 3-10 结果

oracle学习 第三章 常用的SQL*PLUS命令 ——02_第1张图片

看到以上输出时,您发现在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 结果

oracle学习 第三章 常用的SQL*PLUS命令 ——02_第2张图片

这与我们输入SQL语句后立即执行所得的结果完全相同。

用n来指定第n行为当前行,这里的n为自然数。那么如果你想在第一行之前插入一行数据,又该怎么办呢?可以使用0 text在第一行之前插入一行数据。

如果发现SQL缓冲区中某行的内容需要去掉,又该怎么处理呢?

3.6 del命令

可以使用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 结果

oracle学习 第三章 常用的SQL*PLUS命令 ——02_第3张图片

很显然例3-20显示的结果是无序的,其易读性也下降了。但是有时为了系统的整体效率,牺牲一些查询结果的易读性也是在所难免。这也就像社会上常说的“牺牲小家为大家”一样。

在这里我们并没有给出del m,n命令和del 命令的例子,因为他们的用法与del m命令大同小异。如果读者甘心去可以自己试一试就行。

除了以上所介绍的修改和删除命令之外,还有没有其他的SQL*PLUS的命令来完成相关的操作呢?


3.7 C(HANGE)命令

也可以使用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 结果

oracle学习 第三章 常用的SQL*PLUS命令 ——02_第4张图片

从本节的讨论可以看出,在某些情况下使用C命令进行修改或者删除操作可能比使用其他的命令更方便。

3.8 如何生成脚本

为了演示乘生成脚本文件,可以重新输入例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 结果

oracle学习 第三章 常用的SQL*PLUS命令 ——02_第5张图片

现在您可以输入如例 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

下一篇:

你可能感兴趣的:(oracle,sql,windows,dba,教程)