DIsql 命令的快速参考
序号 变量名称 属性 用途
1 AUTO[COMMIT] <ON|OFF(默认值)> 设置自动提交
ON:表示打开自动提交,所有执行的 SQL 语句的事务将自动进行提交。
OFF:表示关闭自动提交,所有执行的 SQL 语句的事务将由用户显式提交,为默认设
置
2 DEFINE <c(默认的变量前缀是&)|ON(默认值) |OFF> 定义本地变量
c:表示打开 DEFINE 功能,同时定义前缀变量符号,c 为定义的前缀符号。
ON:表示打开 DEFINE 功能,使用默认前缀符号&。
OFF:表示不使用 DEFINE 功能。
3 ECHO <ON(默认值)|OFF> 显示脚本中正在执行的 SQL 语句
4 FEED[BACK] <6(默认值)|n|ON|OFF> 显示当前 SQL 语句查询或修改 的行数
n:表示结果大于 n 行时,才显示结果的总行数。
ON:打开显示开关,使用默认值 6。
OFF:关闭显示开关。
5 HEA[DING] <ON(默认值)|OFF> 显示列标题
当 SET HEADING OFF 时,在每页的上面不显示列标题,而是以空白行代替。
6 LINESHOW <ON 默认值|OFF> 显示行号
7 NEWP[AGE] <1(默认值)|n|NONE> 设置页与页之间的分隔
SET NEWPAGE 0 时,在每页的开头有一个换号符。
当 SET NEWPAGE n 时,在页和页之间隔着 n 个空行。
当 SET NEWPAGE NONE 时,在页和页之间没有任何间隔。
8 PAGES[IZE] <14(默认值)|n> 设置一页有多少行数
如果设为 0,则所有的输出内容为一页并且不显示列标题。默认值为 14。
9 TIMING <ON(默认值)|OFF> 显示每个 SQL 语句花费的执行时间
10 TIME <ON|OFF(默认值)> 显示系统的当前时间
11 VER[IFY] <ON(默认值)|OFF> 列出环境变量被替换前、后的控制命令文本
12 LONG <800(默认值)|n> 设置大字段类型显示的最大字节数
设置 BLOB、CLOB、CHAR、VARCHAR、BINARY、VARBINARY、CLASS 等类型一列能显示的最大字节数。
13 LINESIZE <screem_length(默认值,屏幕宽度)|n> 设置屏幕上一行显示宽度
14 SERVEROUT[PUT] <ON | OFF(默认值)> [SIZE <20000(默认值)|n>]
[FOR[MAT] <WRA[PPED]| WOR[D_WRAPPED](默认值)| TRU[NCATED]>]
在块中有打印信息时,是否打印,以及打印的格式
ON/OFF:是否打印。
SIZE:打印的最大长度。
WORD_WRAPPED:按照单词分隔。
TRUNCATED:单词被截断。
FORMAT:按照服务器返回的显示,不做格式化
15 SCREENBUFSIZE <DEFAULT(20K) | n> 设置屏幕缓冲区的长度
16 CHAR_CODE <GBK | UTF8 | DEFAULT (默认值,操作系统的编码方式)> 设置 SQL 语句的编码方式
17 CURSOR <STATIC | FORWARDONLY (默认值)|DEFAULT> 设置 DPI 语句句柄中游标的类型
18 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 获得的执行计划,是服务器实际执行的计划。
19 DESCRIBE [DEPTH <1(默认值) | n | ALL>] [LINE[NUM] <ON | OFF(默认值)>] [INDENT <ON | OFF(默认值)>] 设置 DESCRIBE 的显示方式
DEPTH:结构信息显示至第 N 层,默认只显示第 1 层。范围是 1-40。当设置为 ALL时,DEPTH 为 40。
LINENUM:是否显示对象行号,成员显示父亲的行号。
INDENT:当对象的类型是复合类型时,是否通过缩进的方式显示成员信息。
20 TRIMS[POOL] <OFF(默认值)| ON> 设置 spool 文件中每行的结尾空格
21 LOBCOMPLETE <OFF(默认值)| ON> 设置大字段数据是否从服务器全部取出
对于大字段数据,是否从服务器全部取出,防止死锁的发生;与显示长度不同,即便是
全部取出,也可以只显示一部分。
22 COLSEP [text] 设置列之间的分割符。缺省为一个空格
如果 text 包含空格或标点符号,请用单引号扩起来。默认为一个空格。
23 KEEPDATA <ON|OFF(默认值)> 是否为数据对齐进行优化,或者
保持数据的原始格式。ON 不优化,OFF 对齐优化。缺省为OFF
24 AUTORECONN <ON|OFF(默认值)> 是否自动重新连接。ON 是,OFF 否。缺省为 OFF
是否进行自动重新连接,设置为 ON 时,使用上次连接的属性设置进行自动重连,缺省
为 ON
25 NEST_COMMENT <ON|OFF(默认值)> 是否支持多行注释嵌套。ON 是,OFF 否。缺省为 OFF
Disql 中支持注释,注释必须由起始符号“/*”开始,由结
束符号“*/”结束。注释内容还可以嵌套其他的注释,嵌套的注释也同样需由“/*”开始
和“*/”结束
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,代表全部按科学计数法
显示
当数据直接打印长度超过 float_length 时以科学计数法显示,否则直接显示。float_length 取值范围为 0~350,为 0 代表总是以科学计数法显示。
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.4 SHOW 命令查看环境变量
通过使用 SHOW 命令,用户就可以快速而方便的了解到 DIsql 环境的当前环境变量设置。
SHOW 可以显示一个或多个变量。显示多个变量时中间加空格,当其中某一变量出错之后,后面的仍会继续显示。
语法如下:
SHOW <system_variable>{<system_variable>}
<system_variable>:环境变量。
Eg:
SQL> show heading timing
4.5.2 COLUMN
定义一个本地列或表达式。
语法如下:
COL[UMN] [<column | expr> [<option>]]
<option> ::= NEW_VALUE variable
COL[UMN]:列举出所有的 COLUMN 变量信息。
COL[UMN] column | expr:列举出某个 column 或 expr,如果存在,则输出信息,否则报错。
COL[UMN] column | expr option:option 目前仅支持 NEW_VALUE,表示该column|expr 的值,同时作为变量存在。但如果该变量未赋值,通过 DEFINE 查询时,不会显示该变量。
查询结果的最后一个值赋给本地变量。
示例如下:
SQL> COLUMN CVAR NEW_VALUE DVAR
SQL> SELECT CUSTOMERID CVAR FROM SALES.CUSTOMER;
行号 CVAR
---------- -----------
1 1
4.6 查看执行计划 EXPLAIN
用 EXPLAIN 命令来查看查询语句的执行计划。
语法如下:
EXPLAIN <sql_clause>
<sql_clause>请参考《DM8_SQL 语言使用手册》。
示例如下:
SQL>EXPLAIN select count(*) from sysobjects;
4.7 设置异常处理方式 WHENEVER
用 WHENEVER 命令可以设置异常处理方式,继续执行或退出 DIsql。
语法如下:
WHENEVER SQLERROR
CONTINUE [ COMMIT | ROLLBACK | NONE ] | EXIT [ SUCCESS | FAILURE | WARNING | n | <variable> | : <bindvariable> ] [ COMMIT | ROLLBACK ]
n 和<variable>的返回值受限于操作系统,在不同平台下,会有所不同,例如:UNIX 系统只用一个字节来存 code,所以返回值的范围只在 0-255 之间。
示例如下:
SQL>whenever sqlerror exit 1
SQL>select c1 from dual;
select c1 from dual;
第 1 行附近出现错误[-2111]:无效的列名[C1].
--windows 系统下,输入 echo %ERRORLEVEL%,查看返回值为:1
--linux 系统下,输入 echo $?,查看返回值为:1
4.8 查看下一个结果集 MORE
当结果集过多,屏幕只能显示一个时,用户可以使用 MORE 命令切换到下一个结果集。
MORE
例如,当执行如下语句时,用户想查看更多的结果集,可以使用 MORE 命令。
begin
select top 10 * from v$dm_ini;
select top 10 * from sysobjects;
select * from dual;
end
/
4.9 显示 SQL 语句或块信息 LIST
显示最近执行的 SQL 语句或者 PL/SQL 块信息。不显示 DIsql 命令。
L[IST]或者;
4.10 插入大对象数据
当插入语句中包含大对象数据文件时,使用@。
@<插入语句>
<插入语句>,请参考《DM8_SQL 语言使用手册》,其中大数据的插入值格式为:
@'path'
示例如下:
例如,在 test 表中插入大对象 e:\DSC_1663.jpg。
create table test(a int,b image);
@insert into testvalues(1,@'e:\DSC_1663.jpg');
4.11 缓存清理 CLEAR
清理指定操作本地缓存。
语法如下:
CL[EAR] <option>
<option> ::= [COL[UMNS] | SQL | SCR[EEN] | BUFF[ER]]
COL[UMNS]:清理所有的 COLUMN 变量信息。
SQL:清理本地 SQL 缓存信息。
SCR[EEN]:清理 DIsql 终端屏幕信息。
BUFF[ER]:同 SQL 功能一样,清理本地 SQL 缓存信息。
示例如下:
SQL> COLUMN CVAR NEW_VALUE DVAR
SQL> col
COLUMN CVAR ON
NEW_VALUE DVAR
SQL> cl col
columns 已清除
SQL> col
SQL>
5.2使用 START 命令运行脚本
<`运行脚本>中的符号`位于键盘第二排左起第一个。
如果在 LINUX 环境下使用<`运行脚本>,则符号`需要加\或'进行转义。 例如:./disql SYSDBA/SYSDBA\`/dev/test.sql
1.启动 DIsql 时,运行脚本。
disql SYSDBA/SYSDBA `D:\test.sql
2. 进入 DIsql 之后,运行脚本。
SQL>start D:\test.sql 或 SQL>`D:\test.sql
5.3 使用 EDIT 命令编辑脚本
DIsql 中使用 EDIT 命令来编辑指定的脚本文件。
语法如下:
ED[IT][<file_name>]
<file_name>:指定待编辑的脚本文件。
如果指定文件不存在,则创建该文件。
如果省略文件<file_name>,则只会修改缓冲区中的最后一条 SQL 语句。DIsql 自动打开系统缺省的文本编辑器(WINDOWS 下使用 notepad),复制缓冲区中最后一条SQL 语句到文本中,这时用户可以对其中的内容进行编辑。修改完成之前,DIsql 一直处于等待状态。修改完毕,保存文件后,被修改的内容就会被写入缓存区。这对于修改错误命令很方便。当操作系统为 LINUX 或 UNIX 时,使用 vi 进行编辑。
示例如下:
SQL>EDIT D:\test.sql 或 SQL>edit
5.4 如何在脚本中使用变量
替换变量主要用来进行 SQL、PLSQL 与用户的交互,可以运行时输入,也可提前输入。
替换变量前带有一个前缀标志符(默认是&),DIsql 在命令中遇到替换变量时,用真实值去代替,相当于 c 语言中的宏定义。真实值来源于三个地方:
1.脚本参数带入
2.脚本中直接定义
3.用户动态输入
DIsql 中根据 SET DEFINE 命令开启本地变量功能并定义变量前缀符号。默认符号&作为变量的前缀。详细用法请查看 DEFINE 命令。
5.4.1 脚本带参数值
脚本带参数值,参数名必须是数字。
5.4.1.1 变量名是数字
在脚本中通过&n 来引用参数,n 为 1 表示为第一个参数,2 表示第二个参数,依次类推。如脚本 D:\test.sql:
select * from dual where id = &1;
select * from dual where id = &2;
select * from dual where id = &3;
DIsql 要求传入的参数值个数要与脚本中的变量个数一一对应。比如脚本D:\test.sql 中有三个变量&1、&2、&3,则要求传入的参数值也必须是三个。如果传入参数值个数不匹配,如 n 为 3,但执行时只带了 2 个参数,DIsql 就会在屏幕上提示输入参数。
5.4.2 脚本中定义参数值
使用 DEFINE 命令定义变量值,格式:DEFINE 标识符 = 值。
如脚本 D:\test.sql:
define n=1
define s=DIsql
select &n from dual;
select '&s' from dual;
如果变量没有定义,那么在通过&引用时,DIsql 会提示输入。
5.4.3 接收用户交互式输入参数值
很多时候,在执行脚本时,我们希望有些信息根据脚本的提示,让用户动态输入。这种情况非常好实现,满足下面两个条件即可。
1. 运行脚本时不带参数
50DM8_DIsql 使用手册
2. 脚本中不定义参数
如脚本 D:\test.sql:
select &x from dual;
5.5 使用 PROMPT 命令传递信息
PROMPT 命令会在屏幕上输出一行信息。这非常有助于在存储脚本中向用户传送信息。
语法如下:
PROMPT <输出内容>
例如,编写一个查询,要提供用户看到数据的纯文本描述信息。用户就可以使用PROMPT 命令完成这项工作。将如下脚本存储到名为 prompt.sql 的文件中:
prompt 部分 ini 参数和 dminit 建库参数信息(系统值、最小值和最大值);
select top 10 * from v$dm_ini;
执行脚本:
SQL> `f:\prompt.sql