DIsql 环境变量设置

使用 SET 命令可以对当前 DIsql 的环境变量进行设置。并通过 SHOW 命令来查看当前系统中环境变量的设置情况。也可以通过配置文件使 Disql 启动时自动设置一批环境变量。

3.1 DIsql 环境变量

DIsql 中的系统环境变量,汇总如下:

表3.1 DIsql命令的快速参考
序号 变量名称 属性 用途
1 AUTO[COMMIT] <ON|OFF(默认值)> 设置自动提交
2 DEFINE <c(默认的变量前缀是&)|ON(默认值)|OFF> 定义本地变量
3 ECHO <ON(默认值)|OFF> 显示脚本中正在执行的SQL语句
4 FEED[BACK] <6(默认值)|n|ON|OFF> 显示当前SQL语句查询或修改的行数
5 HEA[DING] <ON(默认值)|OFF> 显示列标题
6 LINESHOW <ON默认值|OFF> 显示行号
7 NEWP[AGE] <1(默认值)|n|NONE> 设置页与页之间的分隔
8 PAGES[IZE] <14(默认值)|n> 设置一页有多少行数
9 TIMING <ON(默认值)|OFF> 显示每个SQL语句花费的执行时间
10 TIME <ON|OFF(默认值)> 显示系统的当前时间
11 VER[IFY] <ON(默认值)|OFF> 列出环境变量被替换前、 后的控制命令文本
12 LONG <800(默认值)|n> 设置大字段类型显示的最大字节数
13 LINESIZE <screem_length(默认值,屏幕宽度)|n> 设置屏幕上一行显示宽度
14 SERVEROUT[PUT] <ON | OFF(默认值)> [SIZE <20000(默认值)|n>] FOR[MAT] <WRA[PPED] | WOR[D_WRAPPED | TRU[NCATED]>] 在块中有打印信息时, 是否打印,以及打印的格式
15 SCREENBUFSIZE <DEFAULT(20K) | n> 设置屏幕缓冲区的长度
16 CHAR_CODE <GBK | GB18030| UTF8 | DEFAULT (默认值,操作系统的编码方式)> 设置SQL语句的编码方式
17 CURSOR <STATIC | FORWARDONLY (默认值)| DEFAULT> 设置DPI语句句柄中游标的类型
18 AUTOTRACE <OFF(默认值) | NL | INDEX | ON|TRACE> 设置执行计划和统计信息的跟踪
19 DESCRIBE [DEPTH<1(默认值) | n | ALL>] [LINE[NUM] <ON | OFF(默认值)>] [INDENT <ON | OFF(默认值)>] 设置DESCRIBE的显示方式
20 TRIMS[POOL] <OFF(默认值)| ON> 设置spool文件中每行的结尾空格
21 LOBCOMPLETE <OFF(默认值)| ON> 设置大字段数据是否从服务器全部取出
22 COLSEP [text] 设置列之间的分割符。缺省为一个空格
23 KEEPDATA <ON|OFF(默认值)> 是否为数据对齐进行优化,或者保持数据的原始格式。ON不优化,OFF对齐优化。缺省为OFF
24 AUTORECONN <ON(默认值)|OFF> 是否自动重新连接。ON是,OFF否。缺省为OFF
25 NEST_COMMENT <ON|OFF(默认值)> 是否支持多行注释嵌套。ON是,OFF否。缺省为OFF
26 NULL_ASNULL <ON|OFF(默认值)> 在绑定参数输入时,是否将输入的NULL当作数据库的null处理。ON是,OFF否。缺省为OFF
27 CMD_EXEC <ON(默认值)|OFF> 是否执行文件中“/”命令。ON是,OFF否。缺省为ON
28 CHARDEL [text] 设置字符串的限定符。缺省为一个空格
29 FLOAT_SHOW <0(默认值)|float_length> 设置FLOAT、DOUBLE类型按科学计数法显示的分界长度。默认为0,代表全部按科学计数法显示
30 CONSOLE_PRINT <ON(默认值)|OFF> 控制台是否打印查询结果。ON是,OFF否。缺省为ON
31 SQLCODE <ON|OFF(默认值)> 控制台是否打印SQLCODE返回值。ON是,OFF否。缺省为OFF
32 SQL_LINESHOW <ON(默认值)|OFF> 输入多行SQL语句时,是否打印SQL语句的行号。ON是,OFF否。缺省为ON
33 NULL_SHOW <ON(默认值)|OFF> 空数据是否显示为NULL。ON是,OFF否。缺省为ON

3.2 SET命令用法

SET命令用于设置DIsql系统环境变量。

语法如下:

SET <system_variable><value>{ <system_variable><value>}

\<system_variable\>:变量名称,参考3.1节。

\<value\>:属性。

可以同时 SET 多个环境变量,如:Set heading on timing on。一旦 SET 之后某个环境变量出错,那么该变量之后的将不再起作用。

3.3 用 SET 命令设置环境变量详解

本节详细介绍如何使用 SET 命令对环境变量进行设置。

3.3.1 AUTO[COMMIT]

设置当前 session 是否对修改的数据进行自动提交。

语法如下:

SET AUTO[COMMIT] <ON|OFF>

ON:表示打开自动提交,所有执行的SQL语句的事务将自动进行提交。

OFF:表示关闭自动提交,所有执行的SQL语句的事务将由用户显式提交,为默认设置。

3.3.2 DEFINE

是否使用 DEFINE 定义本地变量。

语法如下:

SET DEFINE<c(默认的变量前缀是&)|ON(默认值)|OFF>

c:表示打开DEFINE功能,同时定义前缀变量符号,c为定义的前缀符号。

ON:表示打开DEFINE功能,使用默认前缀符号&。

OFF:表示不使用DEFINE功能。

示例如下,打开DEFINE功能,并设置##为变量前缀。

SQL> SET DEFINE ##

SQL> SELECT ##A FROM DUAL;

输入 A的值:1

原值 1:SELECT ##A FROM DUAL;

新值 1:SELECT 1 FROM DUAL;

行号       1

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

1          1

已用时间: 0.178(毫秒). 执行号:722.

3.3.3 ECHO

在用START命令执行一个SQL脚本时,是否显示脚本中正在执行的SQL语句。

语法如下:

SET ECHO <ON(默认值)|OFF>

3.3.4 FEED[BACK]

是否显示当前 SQL 语句查询或修改的总行数。

语法如下:

SET FEED[BACK] <6(默认值)|n|ON|OFF>

n:表示结果大于n行时,才显示结果的总行数。

ON:打开显示开关,使用默认值6。

OFF:关闭显示开关。

示例如下:

FEED[BACK]用法

图3.1 FEED[BACK]用法

3.3.5 HEA[DING]

是否显示列标题。

语法如下:

SET HEA[DING] <ON(默认值)|OFF>

当set heading off时,在每页的上面不显示列标题,而是以空白行代替。

示例如下:

HEA[DING]用法

图3.2 HEA[DING]用法

3.3.6 LINESHOW

lineshow 设置是否显示行号。

语法如下:

SET LINESHOW<ON(默认值)|OFF >;

默认为每行输出打印行号。

例如:

LINESHOW用法

图3.3 LINESHOW 用法

3.3.7 NEWP[AGE]

设置页与页之间的分隔。

语法如下:

SET NEWP[AGE] <1(默认值)|n|NONE>

当set newpage 0 时,在每页的开头有一个换号符。

当set newpage n 时,在页和页之间隔着n个空行。

当set newpage none 时,在页和页之间没有任何间隔。

3.3.8 PAGES[IZE]

设置一页有多少行数。

语法如下:

SET PAGES[IZE] <14(默认值)|n>

如果设为0,则所有的输出内容为一页并且不显示列标题。默认值为14。

3.3.9 TIMING

显示每个SQL语句花费的执行时间。

语法如下:

SET TIMING<ON(默认值)|OFF>

3.3.10 TIME

显示系统的当前时间。

语法如下:

SET TIME<ON|OFF(默认值)>

3.3.11 VER[IFY]

VER[IFY]是否列出环境变量被替换前、后的控制命令文本。默认值为ON,表示列出命令文本。

语法如下:

SET VER[IFY] < ON(默认值)|OFF>

示例如下:

SQL> SET VERIFY OFF

SQL> SELECT &A FROM DUAL;

输入 A的值:3

行号        3

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

1          3

已用时间: 0.558(毫秒). 执行号:733.

SQL> SET VERIFY ON

SQL> SELECT &A FROM DUAL;

输入 A的值:3

原值 1:SELECT &A FROM DUAL;

新值 1:SELECT 3 FROM DUAL;

行号        3

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

1          3

已用时间: 0.127(毫秒). 执行号:734.

3.3.12 LONG

设置BLOB、CLOB、CHAR、VARCHAR、BINARY、VARBINARY、CLASS等类型一列能显示的最大字节数。

语法如下:

SET LONG <800(默认值)|n>

3.3.13 LINESIZE

设置屏幕上一行显示宽度。

语法如下:

SET LINESIZE <screen_length(默认值,屏幕宽度)|n>

3.3.14 SERVEROUT[PUT]

在块中有打印信息时,是否打印,以及打印的格式。设置之后,可以使用DBMS_OUTPUT包打印(认为DBMS_OUTPUT包已经创建)。

语法如下:

SET SERVEROUT[PUT] <ON | OFF(默认值)> [SIZE <20000(默认值)|n>]

[FOR[MAT] <WRA[PPED] | WOR[D_WRAPPED](默认值) | TRU[NCATED]>]

ON/OFF:是否打印。

SIZE:打印的最大长度。

WORD_WRAPPED:按照单词分隔。

TRUNCATED:单词被截断。

FORMAT:按照服务器返回的显示,不做格式化。

示例如下,对比两个结果,不难发现,第二个结果中的单词被截断。

SQL> SET SERVEROUTPUT ON FORMAT WORD_WRAPPED

SQL> SET LINESIZE 20

SQL>BEGIN

       DBMS_OUTPUT.PUT_LINE('If there is nothing left to do');
   
      DBMS_OUTPUT.PUT_LINE('shall we continue with plan B?');
  
      END;
  
      /
  
If there is nothing

left to do

shall we continue with

plan B?

PL/SQL 过程已成功完成

已用时间: 1.140(毫秒). 执行号:729.

SQL> SET SERVEROUTPUT ON FORMAT TRUNCATED

SQL> SET LINESIZE 20

SQL>BEGIN

2        DBMS_OUTPUT.PUT_LINE('If there is nothing left to do');

3        DBMS_OUTPUT.PUT_LINE('shall we continue with plan B?');

4      END;

5      /

If there is nothing

shall we continue wi

PL/SQL 过程已成功完成

已用时间: 0.330(毫秒). 执行号:731.

3.3.15 SCREENBUFSIZE

设置屏幕缓冲区的长度。用来存储屏幕上显示的内容。

语法如下:

SET SCREENBUFSIZE<DEFAULT(20K) | n>

3.3.16 CHAR_CODE

设置SQL语句的编码方式。

语法如下:

SET CHAR_CODE <GBK | UTF8 | DEFAULT(默认值,操作系统的编码方式)>

3.3.17 CURSOR

设置 DPI 语句句柄中游标的类型。

语法如下:

SET CURSOR <STATIC | FORWARDONLY (默认值)| DEFAULT>

3.3.18 AUTOTRACE

设置执行计划和统计信息的跟踪。

语法如下:

SET AUTOTRACE <OFF(默认值) | NL | INDEX | ON|TRACE>

当 SET AUTOTRACE OFF时,停止 AUTOTRACE 功能,常规执行语句。

当 SET AUTOTRACE NL时,开启 AUTOTRACE 功能,不执行语句,如果执行计划中有嵌套循环操作,那么打印NL操作符的内容。

当 SET AUTOTRACE INDEX(或者ON)时,开启 AUTOTRACE 功能,不执行语句,如果有表扫描,那么打印执行计划中表扫描的方式、表名和索引。

当 SET AUTOTRACE TRACE 时,开启 AUTOTRACE 功能,执行语句,打印执行计划。此功能与服务器 EXPLAIN 语句的区别在于,EXPLAIN 只生成执行计划,并不会真正执行 SQL 语句,因此产生的执行计划有可能不准。而 TRACE 获得的执行计划,是服务器实际执行的计划。

3.3.19 DESCRIBE

设置 DESCRIBE 对象结构信息的显示方式。

语法如下:

SET DESCRIBE [DEPTH <1(默认值) | n | ALL>] [LINE[NUM] <ON | OFF(默认值)>] [INDENT <ON | OFF(默认值)>]

DEPTH:结构信息显示至第N层,默认只显示第 1 层。范围是 1-40。当设置为 ALL 时,DEPTH 为 40。

LINENUM:是否显示对象行号,成员显示父亲的行号。

INDENT:当对象的类型是复合类型时,是否通过缩进的方式显示成员信息。

3.3.20 TRIMS[POOL]

设置 TRIMS[POOL],和 SPOOL 功能结合使用。

语法如下:

SET TRIMS[POOL] <OFF(默认值) | ON>

对于 SPOOL 文件,是否去除输出每行的结尾空格,缺省为 OFF。

3.3.21 LOBCOMPLETE

设置 LOBCOMPLETE,是否从服务器中全部取出大字段数据。

语法如下:

SET LOBCOMPLETE <OFF(默认值) | ON>

对于大字段数据,是否从服务器全部取出,防止死锁的发生;与显示长度不同,即便是全部取出,也可以只显示一部分。

3.3.22 COLSEP

设置列之间的分割符。

语法如下:

SET COLSEP[text]

如果 text 包含空格或标点符号,请用单引号扩起来。默认为一个空格。

3.3.23 KEEPDATA

是否为数据对齐进行优化,或者保持数据的原始格式。

语法如下:

SET KEEPDATA <ON|OFF(默认值)>

OFF:表示为保证数据的对齐格式,DIsql对服务器传回的字符串数据,将其中的换行符、TAB都转换为空格。缺省为OFF。

ON:表示关闭对齐优化。

3.3.24 AUTORECONN

是否进行自动重新连接。

语法如下:

SET AUTORECONN <ON(默认值) | OFF>

是否进行自动重新连接,设置为 ON 时,使用上次连接的属性设置进行自动重连,缺省为 ON。

3.3.25 NEST_COMMENT

是否支持多层注释嵌套。Disql 中支持注释,注释必须由起始符号“/*”开始,由结束符号“*/”结束。注释内容还可以嵌套其他的注释,嵌套的注释也同样需由“/*”开始和“*/”结束。

语法如下:

SET NEST_COMMENT <ON|OFF(默认值)>

ON:是,支持多层注释。

OFF:否,只支持一层注释。缺省为OFF。

示例如下:当 SETNEST_COMMENT ON 时,打开支持多层注释的嵌套。下面这个例子就无法停止,因为有两个注释起始符号,只有一个注释结束符号。所以程序一直处于输入状态。当 SET NEST_COMMENT OFF 时,只支持一行注释,程序只要找到一组/*和*/就会结束。

SQL>SET NEST_COMMENT OFF

/************** abcdfdddef

/*********

*/ 

CREATE TABLE TEST(C1 INT);

3.3.26 NULL_ASNULL

在绑定参数输入时,是否将输入的 NULL 当做数据库的 null 处理。ON 是,OFF 否。缺省为 OFF。

语法如下:

SET NULL_ASNULL<ON|OFF(默认值)>

ON:是。

OFF:否。缺省为OFF。

示例如下:

drop table tm;

create table tm(c1 int,c2 varchar);

insert into tm values(null,'a');

commit;


SET NULL_ASNULL OFF

insert into tm values(?,?);

请输入参数1的值:null

请输入参数2的值:null

 insert into tm values(?,?);
 
[-70011]:无效的转换字符串.


SETNULL_ASNULL ON

insert into tm values(?,?);

请输入参数1的值:null

请输入参数2的值:null

影响行数 1

3.3.27 CMD_EXEC

是否执行sql脚本文件中“/”命令,ON是,OFF否。缺省为ON。

语法如下:

SET CMD_EXEC <ON (默认值)|OFF>

ON:是。缺省为ON。

OFF:否。

示例如下:

test.sql脚本位于d:\目录下。test.sql内容如下:

select 1;

/

Commit;

缺省CMD_EXEC为ON。

SQL> `d:\test.sql

SQL> select 1;

行号        1

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

1          1

已用时间: 0.842(毫秒). 执行号:1664.

SQL> /


行号        1

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

1          1


已用时间: 0.832(毫秒). 执行号:1665.

SQL> commit;

操作已执行

已用时间: 1.061(毫秒). 执行号:1666.

修改CMD_EXEC为OFF。

SQL>SET CMD_EXEC OFF

SQL> `d:\test.sql

SQL> select 1;


行号        1

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

1          1


已用时间: 0.866(毫秒). 执行号:1667.

SQL> commit;

操作已执行

已用时间: 0.800(毫秒). 执行号:1668.

3.3.28 CHARDEL

设置字符串的限定符。

语法如下:

SET CHARDEL [text]

如果text包含空格或标点符号,则需要用单引号扩起来。默认为一个空格。

示例如下:

SQL> SET CHARDEL $

SQL> SELECT 'aa';


行号        'aa'

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

1		   $aa$


SQL> SET CHARDEL '"';

SQL> SELECT 'aa';


行号        'aa'

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

1		   "aa"

3.3.29 FLOAT_SHOW

设置 FLOAT、DOUBLE 类型数据按科学计数法显示的分界长度。

语法如下:

SET FLOAT_SHOW <0(默认值)| float_length>

当数据直接打印长度超过 float_length 时以科学计数法显示,否则直接显示。float_length 取值范围为 0~350,为 0 代表总是以科学计数法显示。

示例如下:

SQL> SET FLOAT_SHOW 50

SQL> SELECT 10000000.000111;


行号        10000000.000111

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

1          10000000.000111


SQL> SET FLOAT_SHOW 0

SQL> SELECT 10000000.000111;


行号        10000000.000111

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

1          1.000000000011100E+07

3.3.30 CONSOLE_PRINT

控制台是否打印查询结果,ON 是,OFF 否。缺省为 ON。

语法如下:

SET CONSOLE_PRINT <ON(默认值)|OFF>

ON:是。缺省为ON。

OFF:否。

示例如下:

缺省CONSOLE_PRINT为ON。

SQL> select 1;

行号       1
---------- -----------
1          1

已用时间: 0.440(毫秒). 执行号:1664.

修改CONSOLE_PRINT为OFF。

SQL> set console_print off

SQL> select 1;

3.3.31 SQLCODE

控制台是否打印 SQLCODE 返回值,ON 是,OFF 否。缺省为 OFF。SQLCODE 返回 0 表示当前 SQL 语句执行成功,SQLCODE 返回 1 表示当前 SQL 语句执行失败。

语法如下:

SET SQLCODE <ON|OFF(默认值)>

ON:是。

OFF:否。缺省为OFF。

示例如下:

缺省SQLCODE为OFF。

SQL> select 1;

行号       1
---------- -----------
1          1

已用时间: 2.136(毫秒). 执行号:700.

修改SQLCODE为ON。

SQL> set sqlcode on
SQL> select 1;

行号       1
---------- -----------
1          1

已用时间: 0.402(毫秒). 执行号:701.
SQLCODE=0: SQL statement executed successfully

3.3.32 SQL_LINESHOW

输入多行SQL语句时,是否打印 SQL 语句的行号,ON 是,OFF 否。缺省为 ON。

语法如下:

SET SQL_LINESHOW <ON(默认值)|OFF>

ON:是。缺省为ON。

OFF:否。

示例如下:

缺省SQL_LINESHOW为ON。

SQL> select
2   'a'
3   ;

行号       'a'
---------- ---
1          a

已用时间: 0.414(毫秒). 执行号:703.

修改 SQL_LINESHOW 为 OFF。

SQL> set sql_lineshow off
SQL> select
'a'
;

行号       'a'
---------- ---
1          a

已用时间: 0.202(毫秒). 执行号:704.

3.3.33 NULL_SHOW

空数据是否显示为 NULL,ON 是,OFF 否。缺省为 ON。

语法如下:

SET NULL_SHOW <ON(默认值)|OFF>

ON:是。缺省为 ON。

OFF:否。

示例如下:

缺省 NULL_SHOW 为 ON。

SQL> select null;

行号       NULL
---------- ----
1          NULL

修改 NULL_SHOW 为 OFF。

SQL> set null_show off
SQL> select null;

行号       NULL
---------- ----
1

3.4 SHOW 命令查看环境变量

通过使用 SHOW 命令,用户就可以快速而方便的了解到 DIsql 环境的当前环境变量设置。

SHOW 可以显示一个或多个变量。显示多个变量时中间加空格,当其中某一变量出错之后,后面的仍会继续显示。

语法如下:

SHOW <system_variable>{<system_variable>}

\<system_variable\>:环境变量。

示例如下,显示 HEADING 和 TIMING 两个变量:

SQL> SHOW HEADING TIMING

HEADING ON.

TIMING ON

3.5 使用配置文件设置环境变量

如果用户希望设置一批永久生效的 DIsql 环境变量,可以自行设置配置文件 ​DM_HOME/bin/disql_conf/glogin.sql,其中 DM_HOME 为 DM 的安装目录,需要用户在操作系统配置 DM_HOME 环境变量,disql_conf 目录和 glogin.sql 文件需要用户自行创建。

DIsql 启动并成功连接数据库服务器后,会自动执行 $DM_HOME/bin/disql_conf/glogin.sql 配置文件,执行时并不会在 Disql 窗口打印信息,如果没有找到该配置文件则忽略。

例如,用户配置 DM_HOME 环境变量后,在 $DM_HOME/bin/disql_conf 目录下创建 glogin.sql,内容如下:

SET FEEDBACK ON

SET TIMING ON

Disql 启动并连接数据库服务器后,上述两个环境变量的设置即生效。

微信扫码
分享文档
扫一扫
联系客服