![Oracle 11g宝典](https://wfqqreader-1252317822.image.myqcloud.com/cover/124/654124/b_654124.jpg)
2.2 编辑、运行语句和命令
通常所说的SQL语句、PL/SQL块都是SQL*Plus语句,它们执行完成后,都可以保存在一个被称为SQL缓冲区的内存区域中,并且只能保存一条最近执行的SQL语句或PL/SQL块。可以对保存在SQL缓冲区的SQL语句和PL/SQL块进行修改,然后再次执行。
除了SQL*Plus语句,在SQL*Plus中执行的其他语句都被称为SQL*Plus命令。它们执行完成后,并不保存在SQL缓冲区中,一般用来对输出的结果进行格式化显示,或编辑与存储SQL语句,也便于制作报表。
SQL*Plus有自己内嵌的命令行编辑器(Command Line Editor),它允许在SQL*Plus中编辑已经保存在SQL缓冲区中的语句。部分常用的编辑命令如表2-1所示,其中可选的部分都用方括号括起来,如APPEND命令与A命令相同。
表2-1 命令行编辑器的部分常用编辑命令
![](https://epubservercos.yuewen.com/359BA4/3591153903643601/epubprivate/OEBPS/Images/figure_0060_0001.jpg?sign=1739235984-mfMSpUabca47mlZKVPtGxCKFC6bbGB9Y-0-f8399be21ff0b39f511b66501d4932d4)
显然,命令行编辑器只能编辑SQL语句、PL/SQL块,而不能编辑SQL*Plus命令。例如,用户输入了COLUMN name FORMAT A18,并想将其中的name更改为dname,则必须重新输入这个命令。
下面看一个使用命令行编辑器的例子。首先在SQL*Plus中输入一条SQL语句(如果超过一行,则每行后面都按Enter键,SQL*Plus会自动增加行号并在屏幕上显示出来),最后在语句结束的分号“;”后面按Enter键。无论该语句正确与否,SQL缓冲区中就有内容了,即可使用命令行编辑器进行编辑。
显示SQL缓冲区中的内容,如图2-17所示。
![](https://epubservercos.yuewen.com/359BA4/3591153903643601/epubprivate/OEBPS/Images/figure_0060_0002.jpg?sign=1739235984-XpSYifEtKZ5GJVjwPP0TKHCAAVMT2mt6-0-374d6be192ded705d1f307b71ac4dd87)
图2-17 显示SQL缓冲区中的内容
使第1行成为当前行(即以“*”表示的行,它表示这是命令行编辑器可以编辑的行),并在其后面添加“, loc”,然后显示SQL缓冲区中的内容,如图2-18所示。显然,使用LIST命令后,最后一行成为了当前行。
![](https://epubservercos.yuewen.com/359BA4/3591153903643601/epubprivate/OEBPS/Images/figure_0061_0001.jpg?sign=1739235984-4DUJ621IqlH3q7yjOCwxHQQi9T0kYtL8-0-2d4a67102fbe0271d2be714b91dd822c)
图2-18 选择当前行并在其结尾添加信息
在当前行后面添加一个新行,其内容是“WHERE deptno=20”。发现输入错误后,将“20”更改成“30”,如图2-19所示。
![](https://epubservercos.yuewen.com/359BA4/3591153903643601/epubprivate/OEBPS/Images/figure_0061_0002.jpg?sign=1739235984-XiCZ0PnKnYxauK8Mf8PmPeUINGGl6p5P-0-56d1d97eb897b1c40152ebacc3765494)
图2-19 在当前行后面添加新行并更改信息
最后可以使用R[UN]命令或前斜线“/”命令,来运行SQL缓冲区中的SQL命令或PL/SQL块。R[UN]命令会显示SQL缓冲区中的内容和运行结果,并使SQL缓冲区中的最后一行成为当前行;而前斜线命令只显示运行结果,而不显示SQL缓冲区中的内容,也不使SQL缓冲区中的最后一行成为当前行,如图2-20所示。
![](https://epubservercos.yuewen.com/359BA4/3591153903643601/epubprivate/OEBPS/Images/figure_0061_0003.jpg?sign=1739235984-33E8iMVd16WUdJ02kKvomonmAz1aDC5U-0-f9c1c8620ab7054f05ba01c8529a250b)
图2-20 运行SQL缓冲区中的语句以及RUN命令与前斜线命令的区别
重新输入并执行一条SQL语句,就会替代SQL缓冲区中原来的内容,也可以用CL[EAR] BUFF[ER]命令清除SQL缓冲区中的内容,如图2-21所示。
![](https://epubservercos.yuewen.com/359BA4/3591153903643601/epubprivate/OEBPS/Images/figure_0061_0004.jpg?sign=1739235984-BhQCuaooBTwPRvMY89fw5VA4zgimWvzf-0-ee4a93f9b30ab32d9696a394f3f847b0)
图2-21 清除SQL缓冲区中的内容