[Oracle]彻底理解SQL*Plus 系统变量

来源:互联网 发布:java纸牌游戏源代码 编辑:程序博客网 时间:2024/04/29 17:34

这几天有空,把SQL*Plus的系统变量总结了一下,形成了这个文档。所用测试环境是Windows Server2003Oracle9i 9.0SQL*Plus 9.0。其中所有例子都是经过测试的。

 

1.       APPI[NFO]{ON|OFF|text}

启用或禁止通过DBMS_APPLICATION_INFO包自动注册当前会话正在执行的模块(命令文件)的名称,或者手工注册模块名称。这可以使DBA能够监视每个模块的性能和资源使用情况。注册的模块的名称保存在V$SESSION视图相应会话的MODULE字段中。注册名称时实际是调用DBMS_APPLICATION_INFO.SET_MODULE存储过程。

[ON]:允许自动注册通过@@@START调用的命令文件的名称。

[OFF]:禁止自动注册通过@@@START调用的命令文件的名称。

[text]:用来手工设置当前会话正在执行的模块名称。

示例:

SQL> set appinfo on

SQL> @js2008.sql         ---模块名将被自动注册

SQL> @jz.sql             ---模块名将被自动注册

APPINFOON时命令文件的名称是自动被注册的。可执行下面两条语句分别查看js2008.sql模块和jz.sql模块的执行情况:

SQL> select * from v$sqlarea where module like '%js2008.sql';

SQL> select * from v$sqlarea where module like '%jz.sql';

而当APPINFOOFF时则不会自动注册命令文件的名称,我们可以手工注册。

SQL> set appinfo off

SQL> set appinfo js2008     ---手工注册模块名

SQL> @js2008.sql

SQL> set appinfo jz         ---手工注册模块名

SQL> @jz.sql

然后执行下面两条语句分别查看js2008.sql模块和jz.sql模块的执行情况:

SQL> select * from v$sqlarea where module='js2008';

SQL> select * from v$sqlarea where module='jz';

 

2.       ARRAY[SIZE] {n}

指示SQL*Plus一次从服务器获取多少行的数据。n的默认值是15取值范围是15000。当查询返回的数据较多时设置为较大的值可提高效率,但需占用更多的内存。假设ARRAYSIZE设为5,而某条SQL查询将返回100行数据,则SQL*Plus需分20次才能从服务器获取到所有的数据行。如下所示:

创建一个具有100行数据的表,并设置ARRAYSIZE5

SQL> set autotrace on       ---使SQL*Plus显示统计信息

SQL> create table t_temp as select * from all_objects where rownum<101;

SQL> set arraysize 5

查询表中所有行

SQL> select * from t_temp;

显示的统计信息如下:

          0  recursive calls

          9  db block gets

         26  consistent gets

          0  physical reads

          0  redo size

      15561  bytes sent via SQL*Net to client

       2992  bytes received via SQL*Net from client

         21  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

        100  rows processed

参看统计信息中“SQL*Net roundtrips to/from client”这行数据。它说明了SQL*Plus需分20次从服务器获取所有数据行(加上发起查询的一次共21次)。

SQL> set arraysize 100           修改ARRAYSIZE100

SQL> select * from t_temp;

显示统计信息如下:

          0  recursive calls

          9  db block gets

          7  consistent gets

          0  physical reads

          0  redo size

      13262  bytes sent via SQL*Net to client

        503  bytes received via SQL*Net from client

          2  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

        100  rows processed

再参看统计信息中的“SQL*Net roundtrips to/from client”这一行,说明SQL*Plus只需1次就可以从服务器获取到所有数据行(加上发起查询的一次共2次)。

 

3.       AUTO[COMMIT]{OFF|ON|IMM[EDIATE]|n}

控制何时提交对数据库的修改。

[OFF]:禁止自动提交,因此我们必须执行COMMIT来手工提交改变。

[ON]:每执行成功一个INSERTUPDATEDELETE语句或PL/SQL块后自动提交。

[IMMEDIATE]:同ON

[n]:每执行成功nINSERTUPDATEDELETE语句或PL/SQL块后自动提交。

 

4.       AUTOP[RINT] {OFF|ON}

控制SQL*Plus是否自动显示绑定变量的值。默认为OFF

SQL> variable v_date char(10)

SQL> set autoprint on

下面PL/SQL执行成功后将自动打印出绑定变量的值。

SQL> begin

  2  select to_char(sysdate,'yyyy-mm-dd') into :v_date from dual;

  3  end;

  4  /

 

PL/SQL 过程已成功完成。

 

 

V_DATE

--------------------------------

2007-05-21

 

5.       AUTORECOVERY [ON|OFF]

ON 设置 RECOVER 命令自动应用恢复过程中所需要的归档重做日志文件的默认文件名。当 AUTORECOVERY 设为 ON 时,不需要与用户进行交互,这时所需要的文件必须具有所期望的名称并且位于所期望的位置。当 AUTORECOVERY 设为 ON 时,所使用的文件名来源于初始化参数 LOG_ARCHIVE_DEST LOG_ARCHIVE_FORMAT 的值。

要在 iSQL*Plus 中使用 RECOVER 命令,必须把 AUTORECOVERY 设为 ON。如果尝试在 AUTORECOVERY OFF 时恢复数据库,将产生以下错误:

SP2-0872: iSQL*Plus 中必须使用 SET AUTORECOVERY ON

OFF 是默认选项,它需要手工输入文件名或者接受所建议的默认文件名。

SET AUTORECOVERY ON

RECOVER DATABASE

 

6.       AUTOT[RACE] {OFF|ON|TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]

控制在成功执行SQL DML语句后显示一个跟踪报表。报表可包括一些关于执行情况的统计信息和执行计划。默认为OFF

[OFF]:不显示跟踪报表。

[ON]:显示跟踪报表。设为ONTRACEONLY隐含包括了EXPLAINSTATISTICS选项。

[TRACEONLY]:显示跟踪报表但不显示查询结果。

[EXPLAIN]:显示查询执行路径。

[STATISTICS]:显示SQL语句统计信息。

SQL> set autotrace traceonly

SQL> select * from scott.dept;

 

 

Execution Plan

----------------------------------------------------------

   0      SELECT STATEMENT Optimizer=CHOOSE

   1    0   TABLE ACCESS (FULL) OF 'DEPT'

 

 

 

 

Statistics

----------------------------------------------------------

          0  recursive calls

          2  db block gets

          2  consistent gets

          0  physical reads

          0  redo size

        604  bytes sent via SQL*Net to client

        503  bytes received via SQL*Net from client

          2  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

          4  rows processed

 

7.       BLO[CKTERMINATOR] {OFF|ON|c}

设置用于结束输入PL/SQL块的字符。此字符不能是数字字符。默认结束字符为“.”。

[OFF]:禁用结束字符。

[ON]:启用结束字符,并重置结束字符为“.”。

[c]:启用结束字符,并指定结束字符为所设置的字符。

修改结束字符为“!”

SQL> set blockterminator !

SQL> begin

  2    insert into;

  3  !                         ---输入!后,块输入结束

SQL> set blockterminator off

SQL> begin

  2    insert into;

  3  !                         ---输入!后,块输入不会结束

  4  !

  5

 

8.       CMDS[EP] {c|OFF|ON}

控制是否允许在一行中输入多个SQL*Plus命令。如果为ON则还可以设置多个SQL*Plus命令之间的分隔符,默认的分隔符为“;”。

[OFF]:禁止在一行中输入多个SQL*Plus命令。

[ON]:允许在一行中输入多个SQL*Plus命令,并设置分隔符为“;”。

[c]:允许在一行中输入多个SQL*Plus命令,并指定分隔符为所设置的字符。

SQL> set cmdsep on

SQL> column e_name heading EmployeeName;column dept_name heading DepartName

SQL> set cmdsep off

SQL> column e_name heading EmployeeName;column dept_name heading DepartName

SP2-0158: 未知的COLUMN选项"dept_name"

 

9.       COLSEP {text}

设置SELECT语句返回的各列之间显示的分隔符。默认是一个空格。

SQL> set colsep ||

SQL> set colsep ‘ ‘

 

10.   COM[PATIBILITY]{V7|V8|NATIVE}

设置当前连接到的Oracle服务器的版本。如果连接到Oracle7则设为V7,连接到Oracle8或以后版本则可设为V8,如果希望由数据库服务器来决定则设为NATIVE(如果连接到Oracle9iCOMPATIBILITY默认设为NATIVE)。另,当连接到Oracle9i时可以把此变量的值设为V7V8,这允许你执行Oracle7Oracle8Oracle8iSQL语句。

 

11.   CON[CAT] {c|OFF|ON}

设置置换变量和紧跟其后的普通字符的连接符。这个变量不好解释还是直接看例子吧。c默认为“.”。

举例,我们要查询SCOTT.DEPT表中的数据。

SQL> define v=scott.de

SQL> select * from &v;             ---这条语句肯定会出错,因为不存在表SCOTT.DE

原值    1: select * from &v

新值    1: select * from scott.de

select * from scott.de

                    *

ERROR 位于第 1 :

ORA-00942: 表或视图不存在

 

 

SQL> select * from &v.pt;             ---注意&vpt之间有个句点

原值    1: select * from &v.pt

新值    1: select * from scott.dept

 

    DEPTNO DNAME

---------- --------------

        10 a"ccounting

        20 RESEARCH

        30 s<ales>

        40 OPERATIONS

 

12.   COPYC[OMMIT] {n}

设置SQL*PlusCOPPY命令在复制多少行数据后进行提交。默认值为0,表示在整个复制操作完成后再提交。n的取值范围为05000

 

13.   COPYTYPECHECK {OFF|ON}

启用或禁用在使用COPY命令插入或附加数据到表中时是否比较数据类型。默认为ON

 

14.   DEF[INE] {c|OFF|ON}

设置置换变量的前缀字符。

[OFF]:不扫描置换变量,不替换置换变量的值。此设置会覆盖系统变量SCAN的设置。

[ON]:扫描并替换置换变量的值。设为ON后会自动把置换变量前缀改为“&”。

[c]:设置置换变量的前缀字符为指定字符。

SQL> set define #

SQL> define aa=scott.dept

SQL> select * from #aa;         ---将把此处的置换变量#aa替换为scott.dept

原值    1: select * from #aa

新值    1: select * from scott.dept

 

    DEPTNO DNAME          LOC

---------- -------------- -------------

        10 ACCOUNTING     NEW YORK

        20 RESEARCH       DALLAS

        30 SALES          CHICAGO

        40 OPERATIONS     BOSTON

 

SQL> set define off             ---禁止扫描替换变量

SQL> select * from #aa;         ---此处的#aa不再作为置换变量,因此将会出错

select * from #aa

              *

ERROR 位于第 1 :

ORA-00911: 无效字符

 

15.   DESC[RIBE] [DEPTH {n|ALL}][LINENUM {ON|OFF}][INDENT {ON|OFF}]

用来控制SQL*PlusDESCRIBE命令的输出。

[DEPTH]:设置递归描述一个对象的深度,默认为1n的取值范围为150。当设为Alln=50

[LINENUM]:控制是否显示行号,默认为OFF

[INDENT]:控制是否自动进行缩进,默认为ON

SQL> create type address as object

  2  (street varchar2(20),

  3  city varchar2(20)

  4  );

  5  /

 

类型已创建。

 

SQL> create type employee as object

  2  (last_name varchar2(30),

  3  empaddr address,

  4  salary number(7,2)

  5  );

  6  /

 

类型已创建。

注意比较下面两条desc employee命令的输出有什么不同。

SQL> desc employee

 名称                                      是否为空? 类型

 ----------------------------------------- -------- ----------------------------

 LAST_NAME                                          VARCHAR2(30)

 EMPADDR                                            ADDRESS

 SALARY                                             NUMBER(7,2)

SQL> set desc depth 2

SQL> desc employee

 名称                                      是否为空? 类型

 ----------------------------------------- -------- ----------------------------

 LAST_NAME                                          VARCHAR2(30)

 EMPADDR                                            ADDRESS

   STREET                                           VARCHAR2(20)

   CITY                                             VARCHAR2(20)

 SALARY                                             NUMBER(7,2)

 

16.   MARKUP HTML [ON|OFF] [HEAD text] [BODY text] [TABLE text] [ENTMAP {ON|OFF}] [SPOOL {ON|OFF}] [PRE[FORMAT] {ON|OFF}]

控制SQL*PlusHTML格式输出查询结果。

[HTML ON|OFF]:允许或禁止SQL*Plus对输出进行HTML编码。默认为OFF

[HEAD text]:设置在最终生成的HTML中,位于“<HEAD></HEAD>”标签内的文本。

[BODY text]:设置在最终生成的HTML中,位于“<BODY>”标签中的文本。

[TABLE text]:设置在最终生成的HTML中,位于“<TABLE>”标签中的文本。

[ENTMAP ON|OFF]:设为ON表示对查询结果中存在的一些特殊字符进行映射,比如把“>”和“<”映射为“&gt;”和“&lt;”,以便能在HTML中正确显示。默认为ON

[SPOOL ON|OFF] ON表示生成格式完整的HTML文件,包括<HTML><HEAD><BODY>等标签。默认为OFF

[PREFORMAT ON|OFF]ON表示把查询结果按原格式放在HTML标签“<PRE>”中,OFF表示格式化查询结果为一个HTML中的“<TABLE>”。默认为OFF

SQL> set markup html on head "<title>This is page title.</title>" body "style='b

ackground:red'" spool on

SQL&gt; spool js2008.html

<br>

SQL&gt; select * from scott.dept;

<br>

SQL&gt; spool off

执行成功后请参见最终生成的js2008.html的源代码。

 

17.   ECHO {OFF|ON}

控制在执行命令文件时是否列出其中的每个命令。

 

18.   EDITF[ILE] file_name[.ext]

设置EDIT命令使用的缺省文件名。也可以包含路径和扩展名。默认为“afiedt.buf”。

SQL> edit                                  ---将打开afiedt.buf文件进行编辑

SQL> set editfile js2008.sql

SQL> edit                                  ---将打开js2008.sql文件进行编辑

 

19.   EMB[EDDED] {OFF|ON}

[OFF]:在一个新页的顶部开始打印报表。

[ON]:紧跟着上一个报表的末尾开始打印报表。

 

20.   ESC[APE] {c|OFF|ON}

定义转义字符。

[OFF]:取消转义字符定义。

[ON]:启用转义字符。并把转义字符重置为“/”。

[c]:设置转义字符为指定字符。

SQL> define v=scott.dept                       ---定义置换变量

SQL> select * from &v;

原值    1: select * from &v

新值    1: select * from scott.dept

 

    DEPTNO DNAME          LOC

---------- -------------- -------------

        10 ACCOUNTING     NEW YORK

        20 RESEARCH       DALLAS

        30 SALES          CHICAGO

        40 OPERATIONS     BOSTON

 

SQL> set escape on

SQL> select * from /&v;                        ---&已被转义,所以这条语句出错

SP2-0552: 未说明结合变量”V”

 

21.   FEED[BACK] {n|OFF|ON}

设置是否显示一个查询返回的记录数。

[OFF]:不显示查询返回的记录数。

[ON]:显示查询返回的记录数,并把n设为1

[n]:当一个查询至少选择了n行时显示返回的记录数。设为0时同OFF

 

22.   FLAGGER {OFF|ENTRY |INTERMED[IATE]|FULL}

检查SQL语句是否符合ANSI/ISO SQL92标准。如果不符合则无法执行并返回错误。同SQL语句“ALTER SESSION SET FLAGGER”等价。ENTRYINTERMEDIATEFULL分别表示ANSI/ISO SQL92的三个结构层次。

SQL> begin null;end;

  2  /

 

PL/SQL 过程已成功完成。

 

SQL> set flagger entry

SQL> begin null;end;

  2  /

begin null;end;

*

ERROR 位于第 1 :

ORA-00097: 使用 Oracle SQL 特性不在 SQL92 Entry 级中

因为PL/SQL块是Oracle特有的,并不包含在SQL92标准中,所以无法正确执行。

 

23.   FLU[SH] {OFF|ON}

控制什么时候输出被发送到用户的显示设备。默认值为ON

[OFF]:允许操作系统缓冲输出。尽当执行一个非交互式的命令文件时才使用此值。

[ON]:禁止操作系统缓冲输出。

 

24.   HEA[DING] {OFF|ON}

设置是否显示列标题。默认值为ON

 

25.   HEADS[EP] {c|OFF|ON}

定义标题分隔符。此字符不能是数字字符或空格字符。可以在COLUMN命令或BTITLETTITLE命令中使用此字符使列标题或者报表标题显示为多行。当设为OFF时,把标题分隔符显示为普通字符。设为ON时将重置为默认的“|”字符。

SQL> set headsep +

SQL> column dname heading 'D+NAME'

SQL> select * from scott.dept;

 

             D

    DEPTNO NAME           LOC

---------- -------------- -------------

        10 a"ccounting    new YOrK

        20 RESEARCH       DALLAS

        30 s<ales>        CHICAGO

        40 OPERATIONS     BOSTON

 

SQL> set headsep off

SQL> column dname heading 'D+NAME'

SQL> select * from dept;

 

    DEPTNO D+NAME         LOC

---------- -------------- -------------

        10 a"ccounting    new YOrK

        20 RESEARCH       DALLAS

        30 s<ales>        CHICAGO

        40 OPERATIONS     BOSTON

 

26.   INSTANCE [instance_path|LOCAL]

把会话的默认实例更改为指定的实例路径。使用 SET INSTANCE 命令不会连接到数据库。当在命令中没有指定实例时使用的是默认实例。在首次使用 SET INSTANCE 之前的所有命令都使用的是默认实例。

要把实例恢复为默认值,可输入 SET INSTANCE 或者 SET INSTANCE LOCAL。关于如何设置初始默认实例的信息可参考相关操作系统的 Oracle 文档。

只有在没有连接到任何实例时才能修改实例。就是说,必须首先从当前连接到的实例断开然后才能设置或修改实例并重新连接到实例以使新的设置生效。

只有当运行了 Oracle Net 时才能使用这个命令。可使用任何有效的 Oracle Net连接标识符作为实例路径。对于如何指定 Oracle Net 连接标识符的完整描述可参考操作系统特定的Oracle 文档。实例路径的最大长度是64个字符。

 

27.   LIN[ESIZE] {n}

设置SQL*Plus显示输出时一行最多允许显示的字符数。默认值是80

 

28.   LOBOF[FSET] {n}

设置对于CLOBNCLOB类型的列,从第几个字符的位置开始获取其数据并显示。

创建一个包含CLOB类型列的表,并插入一行数据:

SQL> create table mytest (mylob clob);

 

表已创建。

 

SQL> insert into mytest values('My name is js2008!');

 

已创建 1 行。

 

SQL> set loboffset 1

SQL> select * from mytest;

 

MYLOB

-----------------------------------------------------

My name is js2008!

注意下面的查询结果,“My name is js2008!”中的“M”没有显示出来。

SQL> set loboffset 2

SQL> select * from mytest;

 

MYLOB

-----------------------------------------------------

y name is js2008!

 

29.   LOGSOURCE [pathname]

指定在恢复数据库时到何处获取归档日志。默认值由 Oracle 初始化文件 init.ora 中的初始化参数 LOG_ARCHIVE_DEST 设置。使用不包括 pathname SET LOGSOURCE 命令可恢复默认位置。

SET LOGSOURCE "/usr/oracle90/dbs/arch"

RECOVER DATABASE

 

30.   LONG {n}

设置显示LONGCLOBNCLOB值和复制LONG值的最大宽度(单位为字节)。默认值为80

 

31.   LONGC[HUNKSIZE] {n}

设置 SQL*Plus 用于检索 LONGCLOBNCLOB XMLType 值的增量大小(字节)。

 

32.   NEWP[AGE] {n|NONE}

设置在报表中每一页的顶部打印几行空行。如果设为0则在每一页的开头放置一个进纸符。如果设为NONE则不打印空行也不在页的开头放置进纸符。

 

33.   NULL text

设置SQL SELECT命令返回的查询结果中的NULL值的表现形式。

SQL> set null (null)

SQL> select ename,sal,comm from scott.emp;

 

ENAME          SAL    COMM

---------- ------- -------

SMITH         $800    (null)

ALLEN        $1600    $300

WARD         $1250    $500

JONES        $2975    (null)

MARTIN       $1250   $1400

 

34.   NUMF[ORMAT] format

设置数字值的缺省显示格式。对数字值的显示格式的描述请参见SQL*Plus参考。

SQL> set numformat $99999

SQL> select ename,sal from emp;

 

ENAME          SAL

---------- -------

SMITH         $800

ALLEN        $1600

 

35.   NUM[WIDTH] {n}

设置数字值的缺省显示宽度。缺省为10

 

36.   PAGES[IZE] {n}

设置每页能够显示的数据行数。默认值14

 

37.   PAU[SE] {OFF|ON|text}

控制SQL*Plus窗口显示输出时的滚动行为。

[OFF]:不暂停滚动,一次显示完。

[ON]:每开始显示一个新页时暂停,等待按下回车键再显示。

[text]:暂停时显示的提示文本。

SQL> set pause on

SQL> set pause 按回车键显示下一页:

SQL> select * from dept;

按回车键显示下一页:

 

38.   RECSEPCHAR {c}

设置记录分隔符。默认为一个空格字符“ ”。示例请参见下一系统变量的说明。

 

39.   RECSEP {WR[APPED]|EA[CH]|OFF}

设置是否及何时显示或打印记录分隔符。

[WRAPPED]:只有记录行被自动换行时才显示记录分隔符。

[EACH]:在每行记录的下一行显示记录分隔符。

[OFF]:不显示记录分隔符。

SQL> set recsepchar +

SQL> set recsep each

SQL> select * from scott.dept;

 

    DEPTNO DNAME          LOC

---------- -------------- -------------

        10 a"ccounting    new YOrK

+++++++++++++++++++++++++++++++++++++++

        20 RESEARCH       DALLAS

+++++++++++++++++++++++++++++++++++++++

        30 s<ales>        CHICAGO

+++++++++++++++++++++++++++++++++++++++

        40 OPERATIONS     BOSTON

+++++++++++++++++++++++++++++++++++++++

 

40.   SERVEROUT[PUT] {OFF|ON} [SIZE n] [FOR[MAT] {WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED]}]

控制是否显示存储过程或PL/SQL块通过DBMS_OUTPUT.PUT_LINE输出的内容。

[OFF]:不显示。此为默认值。

[ON]:显示。

[SIZE n]:设置缓冲区的字节大小。默认为2000字节,可取值范围为20001,000,000

[FORMAT WRAPPED]:当某行的长度大于LINESIZE设置的大小时自动换行。

[FORMAT WORD_WRAPPED]:在WORD边界自动换行。此为默认值。

[FORMAT TRUNCATED]:当某行的长度大于LINESIZE设置的大小时行被截短。

SQL> set serverout on

SQL> begin dbms_output.put_line('I am js2008.'); end;

  2  /

I am js2008.

 

PL/SQL 过程已成功完成。

 

SQL> set linesize 9

SQL> begin dbms_output.put_line('I am js2008.'); end;

  2  /

I am

js2008.

 

PL/SQL 过程已成功完成。

 

SQL> set serverout on format wrapped

SQL> begin dbms_output.put_line('I am js2008.'); end;

  2  /

I am js20

08.

 

PL/SQL 过程已成功完成。

 

41.   SHIFT[INOUT] {VIS[IBLE]|INV[ISIBLE]}

 

 

42.   SHOW[MODE] {OFF|ON}

控制在使用SET命令改变系统变量的值后是否显示系统变量的旧值和新值。默认值为“OFF”。

SQL> set showmode on

新值:  showmode BOTH

SQL> set linesize 10

原值:  linesize 80                    ---将显示LINESIZE的旧值和新值

新值:  linesize 10

 

43.   SQLBL[ANKLINES] {ON|OFF}

控制是否允许在SQL命令中出现空行。默认值为OFF

SQL> set sqlblanklines off

SQL> select *

  2                                ---在此直接回车后立即退出到命令提示符下

SQL> set sqlblanklines on

SQL> select *

  2                                ---在此直接回车后并不退出。允许出现空行

  3

  4  from dept;

 

    DEPTNO DNAME          LOC

---------- -------------- -------------

        10 ACCOUNTING     NEW YORK

        20 RESEARCH       DALLAS

        30 SALES          CHICAGO

        40 OPERATIONS     BOSTON

 

44.   SQLC[ASE] {MIX[ED]|LO[WER]|UP[PER]}

在执行之前转换SQL命令和PL/SQL块的大小写。命令中的所有文本都会被转换包括引号中的字串和标识符。默认值是“MIXED”。

[MIXED]:不进行转换。

[LOWER]:转换为小写。

[UPPER]:转换为大写。

下面命令查询不到数据,因为Oracle比较字符串时是大小写敏感的:

SQL> set sqlcase mixed

SQL> select * from scott.dept where dname='sAles';

 

未选定行

下面命令可以查询到数据,因为在执行之前“sAles”被转换为了大写的“SALES”:

SQL> set sqlcase upper

SQL> select * from scott.dept where dname='sAles';

 

    DEPTNO DNAME          LOC

---------- -------------- -------------

        30 SALES          CHICAGO

 

45.   SQLCO[NTINUE] {text}

设置当使用连接符(-)把一个SQL*Plus命令分成多行输入时的提示文本。默认为“>”。

SQL> set sqlcontinue 'Enter the next line>'

SQL> column DNAME -

Enter the next line>heading DepartmentName

SQL> select deptno,dname from scott.dept;

 

    DEPTNO DepartmentName

---------- --------------

        10 ACCOUNTING

        20 RESEARCH

        30 SALES

        40 OPERATIONS

 

46.   SQLN[UMBER] {OFF|ON}

控制在输入多行的SQL命令或PL/SQL块时的提示符。默认为ON

[OFF]:设置提示符为SQLPROMPT的值。

[ON]:设置提示符为行号。

SQL> select *

  2  from

  3  scott.dept;

 

47.   SQLPLUSCOMPAT[IBILITY] {x.y[.z]}

设置SQL*Plus的兼容性。它设置VARIABLE命令的行为与指定版本的行为相同。

 

48.   SQLPRE[FIX] {c}

设置SQL*Plus前缀字符。在输入SQL命令或PL/SQL块时可以在一个单独的行上输入一个带有前缀字符的SQL*Plus命令,SQL*Plus将立即执行这个命令并不会影响你正在输入的SQL命令或PL/SQL块。前缀字符必须是一个非数字字符。默认为“#”。

SQL> select *

  2  #column DNAME heading DepartmentName

  2  #column LOC heading Location

  2  from scott.dept;

 

    DEPTNO DepartmentName Location

---------- -------------- -------------

        10 ACCOUNTING     NEW YORK

        20 RESEARCH       DALLAS

        30 SALES          CHICAGO

        40 OPERATIONS     BOSTON

 

49.   SQLP[ROMPT] {text}

设置SQL*Plus的命令提示符。默认为“SQL> ”。

SQL> set sqlprompt 'js2008> '

js2008> exit

 

50.   SQLT[ERMINATOR] {c|OFF|ON}

设置用于结束和执行SQL语句的字符。默认字符为“;”。

[OFF]:不提供SQL结束符。可输入一个空行以结束SQL语句的输入。

[ON]:重置结束符为“;”字符。

[c]:设置为指定字符。

SQL> set sqlterminator !        ---使用感叹号为结束符而不使用默认的分号。

SQL> select * from scott.dept!

 

    DEPTNO DNAME          LOC

---------- -------------- -------------

        10 ACCOUNTING     NEW YORK

        20 RESEARCH       DALLAS

        30 SALES          CHICAGO

        40 OPERATIONS     BOSTON

 

51.   SUF[FIX] {text}

设置SQL*Plus命令中使用的命令文件的缺省扩展名。默认为“sql”。

下面命令将打开js2008.sql文件供编辑:

SQL> edit js2008

下面命令将打开js2008.dat文件供编辑:

SQL> set suffix dat

SQL> edit js2008

 

52.   TAB {OFF|ON}

控制SQL*Plus如何格式化最终输出中的空白。设为OFF时用空格表示输出中的空白,设为ON时用TAB表示输出中的空白。默认为ON

 

53.   TERM[OUT] {OFF|ON}

控制当使用@@@START命令执行一个命令文件时,是否显示中间结果。设置为OFF不会影响直接在“SQL>”提示符下输入的SQL语句或PL/SQL块的输出。默认值为ON

 

54.   TI[ME] {OFF|ON}

控制是否在每个SQL*Plus的命令提示符之前显示当前时间。默认为OFF

SQL> set time on

09:47:58 SQL>

09:47:59 SQL> set time off

SQL>

 

55.   TIMI[NG] {OFF|ON}

控制是否显示成功执行每条SQL语句或PL/SQL块所花费的时间。

SQL> set timing on

SQL> select * from scott.dept;

 

    DEPTNO DNAME          LOC

---------- -------------- -------------

        10 ACCOUNTING     NEW YORK

        20 RESEARCH       DALLAS

        30 SALES          CHICAGO

        40 OPERATIONS     BOSTON

 

已用时间:  00: 00: 00.00                         ---这里将显示所花费的时间

 

56.   TRIM[OUT] {OFF|ON}

控制SQL*Plus是否允许显示每一行之后的空格。设置为ON可提高效率。默认为ON。此变量的值不影响TRIMSPOOL

SQL> set linesize 88

SQL> set trimout on

SQL> select * from scott.dept;

 

    DEPTNO DNAME          LOC

---------- -------------- -------------

        10 ACCOUNTING     NEW YORK

        20 RESEARCH       DALLAS

        30 SALES          CHICAGO

        40 OPERATIONS     BOSTON

 

SQL> set trimout off

TRIMOUT设为OFF后,每一行都将有88个字符,而我的SQL*Plus窗口只有80个字符宽,所以一行只能显示80个字符而剩下的8个字符自动折行显示到了下一行。所以从外观上看各行记录之间都有一个空白行。

SQL> select * from scott.dept;

 

    DEPTNO DNAME          LOC

 

---------- -------------- -------------

 

        10 ACCOUNTING     NEW YORK

 

        20 RESEARCH       DALLAS

 

        30 SALES          CHICAGO

 

        40 OPERATIONS     BOSTON

 

57.   TRIMS[POOL] {ON|OFF}

控制当用SPOOL命令输出查询结果到文件中时,是否删除文件中每行后的空白字符。默认值为OFF。此变量的值不影响TRIMOUT

 

58.   UND[ERLINE] {c|ON|OFF}

控制SQL*Plus在输出查询结果时显示在列标题下方的分隔字符。缺省为“-”字符。

[OFF]:不显示。

[ON]:显示,并重置为缺省的“-”字符。

[c]:设置为指定字符。

SQL> set underline on

SQL> select * from scott.dept;

 

    DEPTNO DNAME          LOC

---------- -------------- -------------                  ---注意这里!

        10 ACCOUNTING     NEW YORK

        20 RESEARCH       DALLAS

        30 SALES          CHICAGO

        40 OPERATIONS     BOSTON

 

SQL> set underline *

SQL> select * from scott.dept;

 

    DEPTNO DNAME          LOC

********** ************** *************      ---注意这里!

        10 ACCOUNTING     NEW YORK

        20 RESEARCH       DALLAS

        30 SALES          CHICAGO

        40 OPERATIONS     BOSTON

 

59.   VER[IFY] {OFF|ON}

控制SQL*Plus在替换置换变量之前或之后时是否列出SQL语句或PL/SQL命令的文本。

SQL> define v=scott.dept

SQL> set verify on

SQL> select * from &v;

原值    1: select * from &v      ---VERIFY=ON,所以将显示替换前后的SQL语句

新值    1: select * from scott.dept

 

    DEPTNO DNAME          LOC

---------- -------------- -------------

        10 ACCOUNTING     NEW YORK

        20 RESEARCH       DALLAS

        30 SALES          CHICAGO

        40 OPERATIONS     BOSTON

SQL> set verify off

SQL> select * from &v;          ---VERIFY=OFF,所以不会显示替换前后的SQL语句

 

    DEPTNO DNAME          LOC

---------- -------------- -------------

        10 ACCOUNTING     NEW YORK

        20 RESEARCH       DALLAS

        30 SALES          CHICAGO

        40 OPERATIONS     BOSTON

 

60.   WRA[P] {OFF|ON}

控制当SQL*Plus选取到的行的宽度大于设置的行宽(LINESIZE的值)时,是否自动折行显示。默认值是ON

[OFF]:行中多余部分将被截掉。

[ON]:允许自动换到下一行显示。

COLUMN命令的WRAPPEDTRUNCATED子句的设置会覆盖这里的设置。

SQL> show linesize

linesize 80

SQL> select * from scott.dept where deptno=20;

 

    DEPTNO DNAME

---------- --------------

        20 RESEARCH

 

SQL> set linesize 15

SQL> select * from scott.dept where deptno=20;

 

    DEPTNO

----------

DNAME

--------------

        20

RESEARCH

 

 

 

 

<>

原创粉丝点击