SQL*Plus Command -- set

目录

1,SET ECHO {ON | OFF}

2,SET HEA[DING] {ON | OFF}

3, SET LIN[ESIZE] {80 | n}

4,SET LONG {80 | n}

5, SET NULL text

6,SET PAGES[IZE] {14 | n}

7,SET SERVEROUT[PUT] {ON | OFF} [SIZE {n |UNL[IMITED]}] [FOR[MAT] {WRA[PPED] | WOR[D_WRAPPED] |TRU[NCATED]}]

8,SET SQLBL[ANKLINES] {ON | OFF}

9,SET SQLC[ASE] {MIX[ED] | LO[WER] | UP[PER]}

10,SET SQLN[UMBER] {ON | OFF}

11,SET SQLP[ROMPT] {SQL> | text}

12,SET TERM[OUT] {ON | OFF}

13,SET TI[ME] {ON | OFF}

14,SET TIMI[NG] {ON | OFF}

15,SET WRA[P] {ON | OFF}

16,SET FEED[BACK] {6 | n | ON | OFF | ONLY}

17,SET COLSEP {' '| text}

18,SET DEF[INE] {& | c | ON | OFF}

19,SET AUTOT[RACE] {ON | OFF | TRACE[ONLY]} [EXP[LAIN]][STAT[ISTICS]]

20,SET HIST[ORY] {ON | OFF | n}


        set命令的作用是设置一个系统变量来更改当前会话的SQL*Plus环境设置。例如:

- 自定义HTML格式
- 启用或禁用列标题的打印
- 设置每页的行数
- 设置数据的显示宽度

        SQL*Plus通过修改系统变量(也称为SET命令变量),来实现对SQL*Plus会话设置特定的环境。SET命令可以修改这些系统变量,SHOW命令可以查看这些变量。这些变量都有一个初始默认值。

如下set命令中,红色加粗字样为默认值:

1,SET ECHO {ON | OFF}

       当使用START、@或者@@执行脚本时,控制是否在屏幕中显示脚本中的命令。ON为显示,OFF为不显示。ECHO命令不影响交互式命令的显示,也不影响从操作系统重定向到SQL*PLUS的命令的显示。如下示例中,set echo on后,就显示出了脚本中的命令:

SQL> show echo
echo OFF
SQL> @set_test.sql

  COUNT( * )
----------
      9178

SQL> set echo on
SQL> @set_test.sql
select     count( * ) from dba_tables;

  COUNT(*)
----------
      9178

2,SET HEA[DING] {ON | OFF}

       控制报表中列标题的打印。ON表示在报表中打印列标题,OFF表示在报表中不打印列标题。SET HEADING OFF命令不影响显示的列宽,它只会取消列标题本身的打印。如下示例中,set heading off后,列标题就不显示了:

SQL> show heading
heading ON
SQL> @set_test.sql

  COUNT(*)
----------
      9178

SQL> set heading off
SQL> @set_test.sql

      9178

3, SET LIN[ESIZE] {80 | n}

       设置SQL*Plus在一行能显示的字符总数。默认一行显示80个字符。它还控制居中对齐和右对齐的文本在TTITLE、BITTLE、REPHEADER和REPFOOTER中的位置。更改LineSize设置会影响DESCRIBE命令输出中的文本换行。DESCRIBE输出列通常按行大小的比例分配。减小或增大行大小可能会在显示中产生意外的文字环绕。可以将LineSize定义为从1到系统允许的最大值。如下示例中,set linesize 20后,每行只显示20个字符,之前一行就显示的信息现在要多行显示:

SQL> create table ma(id number);
SQL> show linesize;
linesize 80
SQL> select dbms_metadata.get_ddl('TABLE','MA','SYS') from dual;

DBMS_METADATA.GET_DDL('TABLE','MA','SYS')
--------------------------------------------------------------------------------

  CREATE TABLE "SYS"."MA"
   (    "ID" NUMBER
   ) PCTFREE 10 PCTUSED 40 INITRANS

SQL> set linesize  20;
SQL> select dbms_metadata.get_ddl('TABLE','MA','SYS') from dual;

DBMS_METADATA.GET_DD
--------------------

  CREATE TABLE "SYS"
."MA"
   (    "ID" NUMBER
   ) PCTFREE 10 PCTU
SED 40 INITRANS

4,SET LONG {80 | n}

       设置显示BLOB、BFILE、CLOB、LONG、NCLOB和XMLType值的最大宽度(以字节为单位),也代表能从大对象中复制出来的最大字符数。在不考虑 SET LONGCHUNKSIZE设置的情况下,查询LONG类型的字段时,需要足够的本地内存来存储SET LONG设定的数据量,这个限制不适用于LOB系列的数据类型。创建表时建议不要使用LONG数据类型的列,尽量使用LOB类型,因为LOB类型限制更少,并且LOB类型还在改进中。n的默认值是80,最大值为 2000000000字节。如下示例中,在set  long 20后,截取的建表语句就不完整了,只有20个字符(其中有几个是字符串前导空格):

SQL> create  table  ma ( id number);
SQL> show long;
long 80
SQL> select dbms_metadata.get_ddl('TABLE','MA','SYS') from dual;

DBMS_METADATA.GET_DDL('TABLE','MA','SYS')
-----------------------------------------------------------

  CREATE TABLE "SYS"."MA"
   (    "ID" NUMBER
   ) PCTFREE 10 PCTUSED 40 INITRANS


SQL> set long 20
SQL> select dbms_metadata.get_ddl('TABLE','MA','SYS') from dual;

DBMS_METADATA.GET_DD
--------------------

  CREATE TABLE
 "SYS

5, SET NULL text

       select语句的结果集中的NULL值显示为其它设定的文本信息。默认值为空("")。如下示例中,在set null **后,结果集中为空的字段显示为**  :

SQL> show NULL
null ""
SQL> select  *  from mb;

        ID NAME
---------- --------------------
         1 a
         1

SQL> set null **
SQL> select  *  from mb;

        ID NAME
---------- --------------------
         1 a
         1 **

6,SET PAGES[IZE] {14 | n}

       设置输出的每一页上的行数。可以将pageSize设置为零以禁止显示所有标题(heading)、名称(title)、分页符(page breaks)、初始空行(initial blank line)和其他格式信息。默认值为14。如下示例中,在set pagesize 0 后可以看到没有了标题和初始空行:

SQL> show pagesize
pagesize 14
SQL> select  count( * )  from dba_tables;


  COUNT( * )
  ----------
      9180

SQL> set  pagesize 0
SQL> select  count( * )  from dba_tables;
      9180

7,SET SERVEROUT[PUT] {ON | OFF} [SIZE {n |UNL[IMITED]}] [FOR[MAT] {WRA[PPED] | WOR[D_WRAPPED] |TRU[NCATED]}]

      控制是否显示存储过程或者SQL*plus中的pl/sql块的输出(即dbms-output.put_line)。DBMS_OUTPUT输出行长度限制为32767字节。OFF代表禁止dbms_output.put_line的输出,ON为显示输出。在 SET SERVEROUTPUT ON时可以同时设置SIZE和FORMAT参数。SIZE为数据库能为输出信息缓存的字节数,默认值为UNLIMITED ,设置其它n值时要满足2000<= n <=1000000。由于没有性能损耗,一般使用默认值unlimited,但如果想保留物理内存,可以设置具体n值,但SERVEROUTPUT不会提前分配资源。WRAPPED表示当一行数据行长超过set  linesize的大小时,自动换行到下一行,当设置为TRUNCATED参数时,则表示对超出行长的部分截断。WORD_WRAPPED表示在超过行长要换行时,以保留完整单词的原则换行,换行时路过前导空格并左对齐。如下示例中,主要演示了FORMAT的几种换行情况:

SQL> show  serveroutput
serveroutput OFF
SQL> show linesize
linesize 80
SQL> exec DBMS_OUTPUT.PUT_LINE('Task is complete, please check.');       //OFF状态下没有输出信息

PL/SQL procedure successfully completed.

SQL> set serveroutput on
SQL> begin                                                 //ON状态下正常输出两行信息
    DBMS_OUTPUT.PUT_LINE('Task is complete, please check.');
        DBMS_OUTPUT.PUT_LINE('No tools can be used now.');
end;
/                                  
Task is complete, please check.
No tools can be used now.

PL/SQL procedure successfully completed.

SQL> set linesize 15
SQL> begin     //将行长设为15后,自动换行,说明format默认值为WORD_WRAPPED,以保留完整单词为原则换行
    DBMS_OUTPUT.PUT_LINE('Task is complete, please check.');
        DBMS_OUTPUT.PUT_LINE('No tools can be used now.');
end;
/
Task is
complete,
please check.
No tools can be
used now.

PL/SQL procedure successfully completed.

SQL> set serveroutput on format TRUNCATED
SQL> begin                  //设为TRUNCATED后,输出信息按Linesize截断
    DBMS_OUTPUT.PUT_LINE('Task is complete, please check.');
        DBMS_OUTPUT.PUT_LINE('No tools can be used now.');
end;
/ 
Task is complet
No tools can be

PL/SQL procedure successfully completed.

SQL> set serveroutput on format wrapped
SQL> begin           //设为wrapped后,输出信息按Linesize换行
    DBMS_OUTPUT.PUT_LINE('Task is complete, please check.');
        DBMS_OUTPUT.PUT_LINE('No tools can be used now.');
end;
/
Task is complet
e, please check
.
No tools can be
 used now.

PL/SQL procedure successfully completed.

8,SET SQLBL[ANKLINES] {ON | OFF}

       控制SQL*Plus是否在一条SQL命令或脚本中放入空行。ON将空行和新行解释为这条SQL命令或脚本的一部分。默认值OFF不允许在一条SQL命令或脚本中的空行或新行。如下示例中,在set  sqlblanklines on后,就可以在一条SQL命令中使用多个空行:

SQL> show SQLBLANKLINES
sqlblanklines OFF
SQL>
SQL> select              //在OFF状态下输入select后再输入两个换行,命令就会自动结束
  2
SQL>
SQL> set  SQLBLANKLINES on
SQL>
SQL> select            //在ON状态下可以使用多个空行
  2
  3
  4  count( * )
  5
  6
  7  from
  8
  9  dba_tables;

  COUNT( * )
  ----------
      9180

9,SET SQLC[ASE] {MIX[ED] | LO[WER] | UP[PER]}

       在执行之前转换SQL命令和PL/SQL块的大小写。UPPER表示SQL*Plus将命令中的所有文本(包括引号和标识符)转换为大写,LOWER表示转换为小写,MIXED表示不做更改。SQLCASE不会更改SQL buffer本身。如下示例中,在set sqlcase upper 后,命令中的字符串'aaa'被转换为了大写,从输出结果可知:

SQL> show  sqlcase
sqlcase MIXED
SQL> select  'aaa' as x from dual;

X
---
aaa

SQL> set  sqlcase upper;
SQL>
SQL> select  'aaa' as x from dual;    //SQL命令被转换为大写了,所以字符串'aaa'也变成了大写

X
---
AAA

10,SET SQLN[UMBER] {ON | OFF}

       设置SQL命令或PL/SQL块的第二行和后续行的提示符。当一条SQL命令写成多行时,ON表示从第二行开始,行首提示符为数字,OFF表示行首提示符为不变,仍为SQLPROMPT参数设置的提示符。

SQL> show sqlnumber
sqlnumber ON
SQL> select                  //设为ON时,从第二行开始,行首提示符为数字
  2  count( * )
  3  from
  4  dba_tables;

  COUNT( * )
  ----------
      9180

SQL> set sqlnumber off
SQL> select               //设为OFF时,提示符不变,仍为SQLPROMPT参数设的值
SQL> count( * )
SQL> from
SQL> dba_tables;

  COUNT( * )
  ----------
      9180

11,SET SQLP[ROMPT] {SQL> | text}

       设置SQL*Plus命令提示符。在设置提示符时,如果前缀使用了'&',则表示使用的是动态变量,需要再次手动给这个变量赋值。如果希望这个命令提示符长期生效,可以将这个set 命令写在$ORACLE_HOME/sqlplus/admin/glogin.sql文件中,这样每次连接的时候就会自动加载参数设置。

SQL> show sqlprompt
sqlprompt "SQL> "
SQL>
SQL> set sqlprompt "TTT> "
TTT>
TTT> set sqlprompt "&AAA> "
Enter value for aaa: SSS>
SSS>>

12,SET TERM[OUT] {ON | OFF}

      当脚本中执行@, @@ or START这些命令时,控制是否显示屏幕输出。 ON表示显示屏幕信息,OFF表示不显示。当设为OFF时,不影响交互式输入信息的显示和从系统重定向到SQL*Plus的信息显示。如下示例中,set termout off 后,@命令执行脚本时,执行结果不显示在屏幕上:

SQL> show  termout
termout ON
SQL>
SQL> @set_test.sql          //设为ON时,屏幕显示输出  

  COUNT(*)
----------
      9180

SQL> set termout off
SQL> @set_test.sql          //设为ON时,屏幕不显示输出 
SQL>

13,SET TI[ME] {ON | OFF}

     控制当前时间的显示。显示每个命令提示符之前的当前时间。OFF禁止时间显示。如下示例中,set time on 后,命令提示符前显示了当前时间: 

SQL> show time
time OFF
SQL>
SQL> set time on
09:53:05 SQL>
09:53:10 SQL>

14,SET TIMI[NG] {ON | OFF}

       控制SQL命令运行的计时统计信息。ON显示每个SQL命令或PL/SQL块运行的计时统计信息。OFF为禁止统计。如下示例中,在set  timing on 后,SQL命令后面显示了执行时间:

SQL> show timing
timing OFF
SQL>
SQL> select count(1) from dba_tables;

  COUNT(1)
----------
      9180

SQL> set timing on
SQL> select count(1) from dba_tables;

  COUNT(1)
----------
      9180

Elapsed: 00:00:00.10
SQL>

15, SET WRA[P] {ON | OFF}

           当数据的行长超过了可显示的行长时,控制是否对数据进行截断。ON表示超过可显示行长的数据自动换行到下一行,OFF表示截断超过显示行长部分的数据。(参数set serveroutput )  

16,SET FEED[BACK] {6 | n | ON | OFF | ONLY}

       控制SQL命令结果的反馈提示。n表示查询结果集最少返回n条数据时才有反馈提示。如在默认值为6时,select语句查询结果集反回6条结果,则会有反馈提示'6 rows selected.',如果结果集只有5条数据,则没有反馈提示。ON和OFF表示是否开启反馈提示,反馈提示也包括'Table created' and 'PL/SQL procedure successfully completed' 这类的反馈提示。当将n设为0时,相当于设为了OFF。当n大于0时,相当于设为ON。ONLY则表示只显示反馈信息而不显示数据信息。

SQL> show feedback
FEEDBACK ON for 6 or more rows
SQL> select id from system.t22 fetch first 6 rows only;  //反回6行数据时有反馈信息'6 rows selected.'

        ID
----------
         1
         7
         2
         3
         4
         6

6 rows selected.

SQL> select id from system.t22 fetch first 5 rows only;    //反回5行数据时没有反馈信息

        ID
----------
         1
         7
         2
         3
         4

SQL>
SQL>  set serveroutput on
SQL> show feedback
FEEDBACK ON for 6 or more rows
SQL> exec DBMS_OUTPUT.PUT_LINE('Task is complete, please check.');
Task is complete, please check.

PL/SQL procedure successfully completed.   //ON状态的反馈信息

SQL> create table s1(id number);

Table created.                       //ON状态的反馈信息

SQL> set feedback off
SQL> exec DBMS_OUTPUT.PUT_LINE('Task is complete, please check.');    //OFF状态没有反馈信息
Task is complete, please check.
SQL> create table s2(id number);    //OFF状态没有反馈信息
SQL>

ONLY参数只有12.2版本以上才有,本人测试的12.1版本没有ONLY参数,官方文档给的测试结果如下 :

SQL> SET FEEDBACK ONLY
SQL> SHOW FEEDBACK
feedback ONLY
SQL> SELECT * FROM EMP;
14 rows selected.

17,SET COLSEP {' '| text}

       控制列的分割符,默认值为一个空格。如果COLSEP变量包含空格或标点符号,则必须用单引号括起来。

SQL> show COLSEP;
colsep " "
SQL> select id ,name from system.t22 fetch first 4 rows only;

        ID NAME
---------- ----------
         1 a100000
         7 a7
         2 a2
         3 a3

SQL> set COLSEP "|"
SQL> select id ,name from system.t22 fetch first 4 rows only;

        ID|NAME
----------|----------
         1|a100000
         7|a7
         2|a2
         3|a3

18,SET DEF[INE] {& | c | ON | OFF}

       将替换变量前缀的字符设置为C(任意特定字符,只能是一个字符),默认值为'&'。也就是在执行脚本时,如果遇到以‘&'符号为前缀的词,数据库会把这个词解析为替换变量,并会提示需要手动输入值。 当设为特定C时,也就是设为了ON,此时可以理解为系统将C字符全部替换成了'&’字符以便系统解析为替换变量。(常遇到的需要设为OFF的情况是,在脚本中的COMMENT语句会用到'&'符做连接说明,这时被解析为替换变量就会出错。)

SQL> show define
define "&" (hex 26)
SQL> select *  from system.t22 where id=&a;           //默认替换变量符为&
Enter value for a: 1
old   1: select *  from system.t22 where id=&a
new   1: select *  from system.t22 where id=1

        ID NAME       INDATE
---------- ---------- ------------------
         1 a100000    21-MAR-19

SQL> set define %
SQL> select *  from system.t22 where id=%a;       //设置替换变量符为%
Enter value for a: 1
old   1: select *  from system.t22 where id=%a
new   1: select *  from system.t22 where id=1

        ID NAME       INDATE
---------- ---------- ------------------
         1 a100000    21-MAR-19

SQL> set define aa                                //替换变量符只能是一个字符
string "aa" is too long. maximum size is 1 character.

19,SET AUTOT[RACE] {ON | OFF | TRACE[ONLY]} [EXP[LAIN]][STAT[ISTICS]]

       显示DML语句的执行报告。详细参考set autotrace

20,SET HIST[ORY] {ON | OFF | n}

       控制历史列表中保存的历史SQL命令条数(一个有多行的PL/SQL块,只算作一条SQL命令),开启时的默认值为100条。设置为开启时,执行history命令可以查看保存的历史SQL命令信息。12.2版本才开始有history命令。

SQL> show history
history is OFF
SQL> set history on
SQL> show history
history is ON and set to "100"
SQL> select max(id) id from tt;
 id
----
 23

SQL> select 1 from dual;
 1
---
 1
 
SQL> history
1 show history
2 select max(id) id from tt;
3 select 1 from dual;

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值