3.3 常用SQL*Plus命令

视频讲解:光盘\TM\lx\3\常用SQL*Plus命令.mp4

在SQL*Plus环境中操作Oracle数据库,除了使用SQL语句外,用户接触比较多的就是SQL*Plus命令,它执行完成后,不会保存在SQL缓冲区中。下面将介绍一些常用的SQL*Plus命令。

3.3.1 HELP命令

SQL*Plus工具提供了许多操作Oracle数据库的命令,并且每个命令都有很多选项,把所有命令的选项都记住,这对于用户来说非常困难。为了解决这个难题,SQL*Plus提供了HELP命令来帮助用户查询指定命令的选项。HELP可以向用户提供被查询命令的标题、功能描述、缩写形式和参数选项(包括必选参数和可选参数)等信息。HELP命令的语法形式如下:

        HELP|? [topic]

“? ”表示一个命令的部分字符,这样就可以通过提供命令的部分字符以模糊查询的方式来查询命令格式;topic参数表示将要查询的命令的完整名称。若省略“? ”和topic参数,直接执行HELP命令,则会输出HELP命令本身的语法格式及其功能描述信息。

【例3.9】 startup命令用来启动数据库实例,下面使用HELP命令查看startup命令的语法格式及功能描述,具体代码如下。

        SQL> help startup

本例运行结果如图3.6所示。

图3.6 startup命令

如果用户无法记清所要使用的SQL*Plus命令,则可以使用help index命令来查看SQL*Plus命令清单。

【例3.10】 使用help index命令来查看SQL*Plus命令清单,具体代码如下。

        SQL> help index

本例运行结果如图3.7所示。

图3.7 SQL*Plus命令清单

3.3.2 DESCRIBE命令

在SQL*Plus的众多命令中,DESCRIBE命令可能是被使用得最频繁的一个,它用来查询指定数据对象的组成结构。比如,通过DESCRIBE命令查询表和视图的结构,查询结果就可以列出相应对象各个列的名称、是否为空及类型等属性。DESCRIBE命令的语法形式如下:

        desc[ribe] object_name;

describe可以缩写为desc, object_name表示将要查询的对象名称。

【例3.11】 下面通过DESCRIBE命令查看dba_tablespaces数据字典表(用来存储表空间信息的内部表)的结构,代码如下:

        SQL> desc dba_tablespaces;

本例运行结果如图3.8所示。

图3.8 查看dba_tablespaces数据字典表结构

相信很多用户都遇到过这种情况,在SQL*Plus中敲了很长的命令后,突然发现想不起某个列的名字了,如果取消当前的命令,待查询后再重敲,那是非常麻烦的事,这里可以使用#desc object_name的命令格式来随时查看数据对象的结构。

【例3.12】 在scott.emp表中查询销售员(SALESMAN)的编号、姓名和工资,在编写SQL语句的过程中,使用#desc scott.emp命令查询scott.emp表中工资字段的名称(sal),代码及运行结果如下:

        SQL> select empno, ename,
          2  #desc scott.emp


         名称            是否为空?        类型
         ------------------     -----------          -----------------------


         EMPNO         NOT NULL        NUMBER(4)
         ENAME                         VARCHAR2(10)
         JOB                           VARCHAR2(9)
         MGR                           NUMBER(4)
         HIREDATE                      DATE
         SAL                           NUMBER(7,2)
         COMM                          NUMBER(7,2)
         DEPTNO                            NUMBER(2)


          2  sal from scott.emp where job='SALESMAN';


         EMPNO             ENAME          SAL
         ----------             ----------           ---------
            7499             ALLEN           1600
            7521             WARD            1250
            7654             MARTIN          1250
            7844             TURNER          1500


        SQL>

说明

DESCRIBE命令不仅可以查询表、视图的结构,而且还可以查询过程、函数和程序包等PL/SQL对象的规范。

3.3.3 SPOOL命令

SPOOL命令可以把查询结果输出到指定文件中,这样可以保存查询结果并方便打印。SPOOL命令的语法格式如下:

        SPO[OL] [file_name[.ext] [CRE[ATE] | REP[LACE] | APP[END]] | OFF | OUT]

参数file_name用于指定脱机文件的名称,默认的文件扩展名为LST。在该参数后面可以跟一个关键字,该关键字有以下几种情况:

CRE[ATE]:表示创建一个新的脱机文件,这也是SPOOL命令的默认状态。

REP[LACE]:表示替代已经存在的脱机文件。

APP[END]:表示把脱机内容附加到一个已经存在的脱机文件中。

OFF | OUT:表示关闭spool输出。

【例3.13】 使用spool命令声称emp.txt文件,并将scott.emp表中销售员(SALESMAN)的记录保存到该文件中,代码如下(实例位置:光盘\TM\sl\3\5)

        SQL> spool c:\emp.txt
        SQL> select empno, ename, job, sal from scott.emp where job='SALESMAN';


        EMPNO          ENAME          JOB             SAL
        ----------          ----------          ---------           ---------
          7499           ALLEN           SALESMAN       1600
          7521           WARD            SALESMAN       1250
          7654           MARTIN          SALESMAN       1250
          7844           TURNER          SALESMAN       1500


        SQL> spool off

上面程序的执行结果是:从spool命令开始(但不包括该命令行),一直到spool off命令行(包括该命令行)之间的所有内容都被写入emp.txt文件中。

注意

只有使用spool off或spool out命令关闭输出,才会在输出文件中看到输出的内容,否则输出文件中无内容或无更新内容。

3.3.4 其他常用命令

除了上面介绍的几个最常用SQL*Plus命令之外,还有一些比较常用,但非常简单的SQL*Plus命令。下面进行简单的介绍。

1.DEFINE命令

该命令用来定义一个用户变量并且可以分配给它一个CHAR值,其语法格式如下:

        DEF[INE] [variable] | [variable = text]

variable:表示定义的变量名。

text:变量的CHAR值。

【例3.14】 使用define命令定义vjob变量,并给它分配一个CHAR值“'SALESMAN'”,代码如下:

        SQL> define vjob='SALESMAN'
        SQL> define vjob
        DEFINE VJOB          ="SALESMAN"(CHAR)

2.SHOW命令

该命令用来显示SQL*Plus系统变量的值或SQL*Plus环境变量的值,其语法格式如下:

        SHO[W] option

option表示要显示的系统选项,常用的选项有ALL、PARAMETERS [parameter_name]、SGA、SPOOL、USER等。

【例3.15】 使用show命令显示当前数据库实例的数据块大小,代码及运行结果如下:

        SQL> show parameters db_block_size;


        NAME                 TYPE       VALUE
        ------------------------------------ ----------- ------------------------------
        db_block_size          integer      8192

3.EDIT命令

SQL语句或PL/SQL块在执行完毕之后,可以被存储在一个被称为SQL缓冲区的内存区域中,用户可以从SQL缓冲区中重新调用、编辑或运行最近输入的SQL语句。若要编辑SQL缓冲区中的最近一条SQL语句或PL/SQL块,既可以在SQL*Plus环境中直接编辑,也可以使用EDIT命令实现在记事本中编辑。EDIT命令用来编辑SQL缓冲区或指定磁盘文件中的SQL语句或PL/SQL块,其语法格式如下:

        EDIT [file_name[.ext]]

参数file_name表示要编辑的磁盘文件名。若在SQL*Plus中只输入“EDIT”或者它的简写形式“ED”,而不指定file_name参数的值,则表示编辑SQL缓冲区中的最近一条SQL语句或PL/SQL块。

执行EDIT命令后,SQL*Plus工具将打开一个包含SQL语句或PL/SQL块的记事本,用户就可以在记事本环境下编辑SQL语句或PL/SQL块。

技巧

如果要执行SQL缓冲区中最近一条SQL语句,可以使用运行命令“/”来执行,这样可以简化操作。

4.SAVE命令

该命令实现将SQL缓冲区中的最近一条SQL语句或PL/SQL块保存到一个文件中,其语法格式如下:

        SAVE file_name

参数file_name表示要保存到的文件名,如果不为保存的文件指定路径,则该文件会保存在Oracle系统安装的主目录中(但不建议这样做)。如果不为保存的文件指定扩展名,则默认扩展名为SQL,即保存的文件为一个SQL脚本文件。

【例3.16】 使用save命令保存SQL缓冲区中的SQL语句到c:\dept.sql文件中,代码及运行结果如下(实例位置:光盘\TM\sl\3\6)

        SQL> select * from scott.dept;


            DEPTNO              DNAME          LOC
        ------------------              --------------        ------------
                10              ACCOUNTING     NEW YORK
                20              RESEARCH       DALLAS
                30              SALES          CHICAGO
                40              OPERATIONS     BOSTON
        SQL> save c:\dept.sql
        已创建file c:\dept.sql

技巧

如果要清空SQL缓冲区中的内容,可以使用clear buffer命令。

5.GET命令

该命令实现把一个SQL脚本文件的内容放进SQL缓冲区,其语法格式如下:

        GET [FILE] file_name[.ext] [LIST | NOLIST]

file_name:要检索的文件名,如果省略了文件的扩展名,则默认文件的扩展名为SQL。

LIST:指定文件的内容加载到缓冲区时显示文件的内容。

NOLIST:指定文件的内容加载到缓冲区时不显示文件的内容。

执行GET命令时,如果file_name参数不包括被检索文件的路径,则SQL*Plus工具会在Oracle系统安装的主目录下检索指定文件。在SQL*Plus找到指定文件后,会把文件中的内容加载到SQL*Plus缓冲区,并显示该文件的内容。

【例3.17】 首先在c:\dept.sql文件中写入SQL脚本,然后通过GET命令将c:\dept.sql文件的内容加载到SQL*Plus缓冲区,最后使用运行命令“/”执行SQL*Plus缓冲区的语句,代码如下。

        SQL> get c:\dept.sql
          1*  select*from scott.dept
        SQL> /

本例运行结果如图3.9所示。

图3.9 加载并执行SQL脚本文件

6.start和@命令

这两个命令都可以用来执行一个SQL脚本文件,它们的语法格式如下:

        STA[RT] {url|file_name[.ext]} [arg ...]
        @ {url|file_name[.ext]} [arg ...]

url:表示要执行的SQL脚本文件的路径。

file_name:表示包含SQL脚本的文件名。

arg:其他参数。

【例3.18】 使用start命令执行包含有“select count(*)from scott.emp; ”SQL脚本的emp.txt文件,代码及运行结果如下:

        SQL> start c:\emp.txt;


          COUNT(*)
        ---------------
              14

注意

上面的代码若使用“@ c:\emp.txt”命令可以得到同样的结果。