文章目录
- 一、功能简介
- 二、DISQL入门
- 三、DISQL环境变量设置
- 3.1 DIsql 环境变量
- 3.2 SET命令用法
- 3.3 用SET命令设置环境变量详解
- 3.3.1 AUTO[COMMIT]
- 3.3.2 DEFINE
- 3.3.3 ECHO
- 3.3.4 FEED[BACK]
- 3.3.5 HEA[DING]
- 3.3.6 LINESHOW
- 3.3.7 NEWP[AGE]
- 3.3.8 PAGES[IZE]
- 3.3.9 TIMING
- 3.3.10 TIME
- 3.3.11 VER[TFY]
- 3.3.12 LONG
- 3.3.13 LINESIZE
- 3.3.14 SERVEROUT[PUT]
- 3.3.15 SCREENBUFSIZE
- 3.3.16
- 3.3.17 LOCAL_CODE
- 3.3.18 CURSOR
- 3.3.19 AUTOTRACE
- 3.3.20 DESCRIBE
- 3.3.21 TRIMS[POOL]
- 3.3.22 LOBCOMPLETE
- 3.3.23 COLSEP
- 3.3.24 KEEPDATA
- 3.3.25 AUTORECONN
- 3.3.26 NEST_COMMENT
- 3.3.27 NULL_ASNULL
- 3.3.28 CMD_EXEC
- 3.3.29
- 3.3.30 FLOAT_SHOW
- 3.3.31 CONSOLE_PRINT
- 3.3.32 SQLCODE
- 3.3.33 SQL_LINESHOW
- 3.3.34
- 3.3.35 SQLPROMPT
- 3.3.36 ISQL_MODE
- 3.3.37 WRAP
- 3.3.38 CTRL_INFO
- 3.3.39 RETRY_CONN
- 3.3.40 RETRY_CONN_TIME
- 3.3.41 ROWS
- 3.3.42 EXPLAIN_MODE
- 3.3.43 PREFIX_STR
- 3.4 SHOW命令查看环境变量
- 3.5 使用配置文件设置环境变量
- 四、DISQL常用命令
- 五、如何在DISQL中使用脚本
一、功能简介
- DIsql用来与DM数据库服务器进行交互
- DIsql识别用户输入,将用户输入的SQL语句打包发送给DM数据库服务器执行,并接收服务器的执行结果,并按用户的要求将执行结果展示给用户
- 为了更好地与用户交互和展示执行结果,用户也可以在DIsql中执行DIsql命令,这些命令由DIsql工具自身进行处理,不被发送给数据库服务器
- SQL语句在DIsql中执行完后都被保存在一个特定的内存区域中,DIsql 命令执行完后不保存在内存区域中
SQL语句 | DIsql命令 |
---|---|
ANSI标准 | DM内部标准 |
语言 | 命令 |
关键字不可缩写 | 关键字可缩写 |
部分语句以分号结束,部分语句以/结束 | 分号可有可无,/完全用不到 |
可以更新表中的数据 | 不能更新表中的数据 |
二、DISQL入门
2.1 启动DIsql
命令行登录语法:
DIsql用法1: disql –h|help 显示disql版本信息和帮助信息
DIsql用法2: disql [ [<option>] [<logon> |{/NOLOG}] [<start>] ]
<option>::=[-L] [-S]
<logon>::={{<username>[/<password>]} | /}[@<connect_identifier>][<option>] [<os_auth>]
<connect_identifier> ::=<svc_name> | {<host>[:<port>]} |<unixsocket_file>
<option>::= #{ <extend_option>=<value>{,<extend_option>=<value>} } //此行外层{}是为了封装参数之用,书写时需要保留
<os_auth>::= AS {SYSDBA|SYSSSO|SYSAUDITOR|USERS|AUTO}
<start>::=<`运行脚本>|<start 运行脚本>|<直接执行语句>|<直接执行 SET 命令>
<`运行脚本>::=`<file_path> [<PARAMETER_VALUE>{ <PARAMETER_VALUE>}]
<start 运行脚本>::=START <file_path> [<PARAMETER_VALUE>{<PARAMETER_VALUE>}]
<直接执行语句>::= -E "<SQL 语句>{;<SQL 语句>}"
<直接执行设置 DIsql 属性命令>::= -C "<SET 命令 | COLUMN 命令>"
[-L] [-S]
:-L表示只尝试登录一次;-S 表示设置 DIsql 界面为隐藏模式,隐藏标识符{{<username>[/<password>]} | /}
:普通登录方式时用户名必写,密码缺省为SYSDBA。/表示采用操作系统身份验证方式登录或利用wallet文件登录。采用操作系统身份验证方式登录时无需指定用户名和密码,即使指定也会被忽略。利用wallet文件登录时,dm_svc.conf文件中的配置项WALLET_LOCATION必须非空,客户端会通过用户输入的服务名以及WALLET_LOCATION配置项指定的wallet文件路径自动获取 wallet 文件中服务名所对应的用户名和密码,因此用户无需输入用户名和密码,若用户输入了用户名和密码,则优先使用用户输入的用户名和密码登录数据库。如果中含有特殊字符,因为特殊字符在操作系统中需要被特殊处理,因此特殊字符书写的时候需要按照要求的格式<svc_name>
:服务名,在dm_svc.conf中配置。使用服务名的好处是第一个IP连不通,会自动连接下一个<host>[:<port>]
:服务器IP地址和端口号。缺省情况下默认为本地服务器和端
口号LOCALHOST:5236。当服务器为本机时,SERVER:PORT可直接写LOCALHOST。当连接其他服务器时,SERVER:PORT需写IP和PORTNUM,如是IPv6地址,需要用[]指明是IPv6 地址,例[fe80::1e6f:65ff:fed1:3724%6]<unixsocket_file>
:专用于LINUX系统中,当服务器与客户端之间使用UNIXSOCKET(UNIX DOMAIN SOCKET - IPC)协议通信时,指定客户端连接的socket文件路径。例如:./disql SYSDBA/SYSDBA@/data/sdb/DAMENG/foo.sock#{inet_type=UNIXSOCKET}
<option>
:为扩展选项,用法为<exetend_option>=。所有value值不
能包含空格,不能包含特殊的符号。书写扩展选项时需要用引号#“{ }“进行封
装,例如:#”{inet_type=tcp,mpp_type=local}”。
现支持的扩展选项如下:
AS <SYSDBA|SYSSSO|SYSAUDITOR|USERS|AUTO>
:操作系统身份验证。用户可以通过将操作系统用户加入到操作系统的dmdba|dmsso|dmauditor用户组来使用操作系统用户登录数据库,分别对应数据库SYSDBA|SYSSSO|SYSAUDITOR用户。还可以通过将操作系统用户加入到操作系统的dmusers用户组来使用操作系统用户登录数据库,对应数据库的同名用户。AUTO表示按顺序自动匹配数据库用户类型。操作系统身份验证无需输入用户名和密码,若输入用户名和密码将会被忽略。操作系统身份验证仅在 DM 安全版本中才提供支持/NOLOG
:表示在未登录DM服务器的情况下启动 disql。此时可以进行DIsql的显示设置和本地变量操作。如果没有/NOLOG 选项必须登录服务器,不带参数的时候提示输入用户名和密码,此时的用户名和密码用法参考。且登录三次失败后退出 DIsql<start>
命令中:<`运行脚本>
既可以在DIsql启动时使用,也可以在进入DIsql界面之后使用。而<start 运行脚本>
只能在进入DIsql界面之后才能使用<`运行脚本>
:反引号运行sql脚本文件。如果在linux环境下使用,<`运行脚本>
外需要加上单引号,里如:'`" < file_path >"'
。<file_path>是运行的sql脚本文件的路径,建议使用绝对路径- DIsql可使用的脚本文件大小上限为2G
<PARAMETER_VALUE>
:传给<file_path>脚本文件中本地变量的参数值,将其中的参数内容传给变量&1,&2,&3…以此类推<start 运行脚本>
:使用START命令运行sql脚本文件。<file_path>和<PARAMETER_VALUE>的用法和<`运行脚本>
相同<直接执行语句>
:使用-E 参数,将在运行DIsql时直接执行后续的一条或多条SQL语句,查询结果不显示行号、执行时间以及执行号等信息,且不受-C参数控制<直接执行设置 DIsql 属性命令>
:使用-C参数,将在运行DIsql时直接执行后续SET命令或COLUMN命令。若存在多个-C,只有最后一个-C生效。若SET命令COLUMN命令在同一个-C中,则COLUMN命令和写在COLUMN命令之后的命令均不生效
2.2 切换登录
2.2.1 LOGIN / LOGOUT
- 服务名:用于连接上服务器的服务名。此处的服务名是一个统称,有三种选择:数据库服务名、IP 地址[:端口号]、或 UNIXSOCKET 文件路径名。其中UNIXSOCKET 文件路径名用法例如:/home/te/foo.sock。服务名缺省的情况下,服务器的 IP 地址为LOCALHOST,LOCALHOST 表示本地服务器,端口号为 5236。
- 用户名和密码:缺省均为 SYSDBA,密码不回显
- SSL 路径和 SSL 密码:用于服务器通信加密,不加密的用户不用设置,缺省为不设置
- UKEY 名称和 UKEY PIN 码:供使用 UKEY 的用户使用,普通用户不用设置,缺省为不使用
- MPP 类型:参见上一节<MPP_TYPE>,MPP 类型是 MPP 登录属性,此属性的设置对非MPP 系统没有影响。此属性的有效值为 GLOBAL 和 LOCAL,缺省为 GLOBAL
- 是否读写分离(y/n):缺省为 n。如果输入 y,会提示:读写分离百分比(0-100)。用户根据需要输入相应的百分比,如果输入的百分比不合法,那就相当于没有设置
- 协议类型:缺省为 TCP,可选 TCP/UDP/IPC/UNIXSOCKET/RDMA
- LOGOUT 命令从登录主库注销会话。断开连接而不退出 DIsql
2.2.1 CONN[ECT] / DISCONN[ECT]
DISCONN[ECT]:断开连接而不退出 DIsql。与 logout 功能一样
2.3 使用DIsql
只需要输入一条 SQL 语句,回车即可。DIsql 将 SQL 语句发送给 DM 数据库服务器并显示服务器返回的结果
2.4 退出DIsql
EXIT | QUIT
三、DISQL环境变量设置
3.1 DIsql 环境变量
3.2 SET命令用法
SET <system_variable><value>{ <system_variable><value>}
可以同时SET多个环境变量,如:Set heading on timing on
一旦SET之后某个环境变量出错,那么该变量之后的将不再起作用
3.3 用SET命令设置环境变量详解
3.3.1 AUTO[COMMIT]
ON:表示打开自动提交,所有执行的 SQL 语句的事务将自动进行提交
OFF:表示关闭自动提交,所有执行的 SQL 语句的事务将由用户显式提交,为默认设置
3.3.2 DEFINE
SET DEFINE<c(默认的变量前缀是&)|ON(缺省值)|OFF>
c:表示打开DEFINE功能,同时定义前缀变量符号,c为定义的前缀符号;
ON:表示打开DEFINE功能,使用默认前缀符号&;
OFF:表示不使用DEFINE功能。
3.3.3 ECHO
在用START命令执行一个SQL脚本时,是否显示脚本中正在执行的SQL语句(on为默认值)
3.3.4 FEED[BACK]
是否显示当前 SQL 语句查询或修改的总行数
SET FEED[BACK] <6(缺省值)|n|ON|OFF>
n:表示结果大于 n 行时,才显示结果的总行数
ON:打开显示开关,使用缺省值 6
OFF:关闭显示开关
3.3.5 HEA[DING]
是否显示列标题
SET HEA[DING] <ON(缺省值)|OFF>
当SET HEADING OFF时,在每页的上面不显示列标题,而是以空白行代替
3.3.6 LINESHOW
LINESHOW设置是否显示行号
SET LINESHOW<ON(缺省值)|OFF >;
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,则所有的输出内容为一页,并且当ISQL_MODE不等于2时,不显示列标题。缺省为14
当ISQL_MODE=1时,如果 PAGESIZE < NEWPAGE + 2,则不显示列标题
当ISQL_MODE=2时,PAGESIZE取任意值,都显示列标题
3.3.9 TIMING
显示每个 SQL 语句花费的执行时间
SET TIMING<ON(缺省值)|OFF>
3.3.10 TIME
显示系统的当前时间
SET TIME<ON|OFF(缺省值)>
3.3.11 VER[TFY]
VER[IFY] 是否列出环境变量被替换前、后的控制命令文本。缺省值为 ON,表示列出命令文本
SET VER[IFY] < ON(缺省值)|OFF>
3.3.12 LONG
设置 BLOB、CLOB、CHAR、VARCHAR、BINARY、VARBINARY、CLASS 等类型一列能显示的最大字节数
SET LONG <800(缺省值)|n>
3.3.13 LINESIZE
设置屏幕上一行显示宽度
SET LINESIZE <screen_length(缺省值,屏幕宽度)|n>
当ISQL_MODE取值为0或1时,LINESIZE取值范围为自1至32767的整数
当ISQL_MODE 取值为 2 时,LINESIZE 取值范围为自0至32767的整数,取值为0时,表示一行数据在同一行显示
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:按照服务器返回的显示,不做格式化。
3.3.15 SCREENBUFSIZE
设置屏幕缓冲区的长度。用来存储屏幕上显示的内容。单位为字节,n有效值范围1~50M
SET SCREENBUFSIZE<DEFAULT(20M) | n>
3.3.16
设置 SQL 语句的编码方式
SET CHAR_CODE <GBK | GB18030 | UTF8 | DEFAULT(缺省值,操作系统的编码方式)>
3.3.17 LOCAL_CODE
设置本地编码方式,指定客户端使用的编码格式,会影响结果集和错误信息的编码
设置该参数时会先检查当前是否连接了数据库,若未连接数据库则设置无效,重连数据
库后恢复设置为指定的本地编码方式
SET LOCAL_CODE <GBK | GB18030 | UTF8 | DEFAULT(缺省值,操作系统的编码方式)>
3.3.18 CURSOR
设置DPI 语句句柄中游标的类型
SET CURSOR <STATIC | FORWARDONLY (缺省值)| DEFAULT>
3.3.19 AUTOTRACE
设置执行计划和统计信息的跟踪
SET AUTOTRACE <OFF(缺省值) | NL | INDEX | ON | TRACE | TRACEONLY>
当SET AUTOTRACE OFF时,停止AUTOTRACE功能,常规执行语句
当SET AUTOTRACE NL时,开启AUTOTRACE功能,不执行语句,如果执行计划中有嵌套循环操作,那么打印NEST LOOP相关操作符的内容
当SET AUTOTRACE INDEX(或者 ON)时,开启AUTOTRACE功能,不执行语句,如果有表扫描,那么打印执行计划中表扫描的方式、表名和索引
当SET AUTOTRACE TRACE时,开启AUTOTRACE功能,执行语句,打印执行计划,并展示执行过程中的部分监控信息;需要设置 INI 中监控参数 ENABLE_MONITOR、MONITOR_SQL_EXEC、MONITOR_TIME、ENABLE_MONITOR_DMSQL均为开启(即等于1时)才有实际意义。此功能与服务器EXPLAIN语句的区别在于,EXPLAIN只生成执行计
划,并不会真正执行SQL语句,因此产生的执行计划有可能不准;而通过TRACE获得的执
行计划,是服务器实际执行的计划
当SET AUTOTRACE TRACEONLY时,开启AUTOTRACE功能,执行语句,打印执行计划,并展示执行过程中的部分监控信息;需要设置INI参数ENABLE_MONITOR、MONITOR_SQL_EXEC、MONITOR_TIME、ENABLE_MONITOR_DMSQL均为开启(即等于1时)才有实际意义。此功能与TRACE区别在于对于查询语句集不打印结果集
3.3.20 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.21 TRIMS[POOL]
设置TRIMS[POOL],和 SPOOL 功能结合使用
SET TRIMS[POOL] <OFF(缺省值) | ON>
对于SPOOL文件,是否去除输出每行的结尾空格,缺省为 OFF
3.3.22 LOBCOMPLETE
是否从服务器中全部取出大字段数据
SET LOBCOMPLETE <OFF(缺省值) | ON>
对于大字段数据,是否从服务器全部取出,防止死锁的发生;与显示长度不同,即便是
全部取出,也可以只显示一部分
3.3.23 COLSEP
设置列之间的分割符
SET COLSEP[text]
text包含空格或标点符号,需用单引号扩起来。默认为一个空格
3.3.24 KEEPDATA
是否为数据对齐进行优化,或者保持数据的原始格式。
SET KEEPDATA <ON|OFF(缺省值)>
OFF:表示为保证数据的对齐格式,DIsql 对服务器传回的字符串数据,将其中的换
行符、TAB 都转换为空格。缺省为 OFF。
ON:表示关闭对齐优化
3.3.25 AUTORECONN
是否进行自动重新连接
SET AUTORECONN <ON(缺省值) | OFF>
是否进行自动重新连接,设置为ON时,使用上次连接的属性设置进行自动重连,缺省
为 ON
3.3.26 NEST_COMMENT
是否支持多层注释嵌套。Disql 中支持注释,注释必须由起始符号“/”开始,由结
束符号“/”结束。注释内容还可以嵌套其他的注释,嵌套的注释也同样需由“/”开始
和“/”结束。
SET NEST_COMMENT <ON|OFF(缺省值)>
ON:是,支持多层注释
OFF:否,只支持一层注释。缺省值
3.3.27 NULL_ASNULL
在绑定参数输入时,是否将输入的 NULL 当做数据库的 null 处理。ON 是,OFF 否。
缺省为 OFF
SET NULL_ASNULL<ON|OFF(缺省值)>
ON:是
OFF:否。缺省为 OFF
3.3.28 CMD_EXEC
是否执行 sql 脚本文件中“/”命令,ON 是,OFF 否。缺省为 ON。
SET CMD_EXEC <ON (缺省值)|OFF>
ON:是。缺省
OFF:否
3.3.29
设置字符串的限定符
SET CHARDEL [text]
如果text包含空格或标点符号,则需要用单引号扩起来。默认为一个空格
3.3.30 FLOAT_SHOW
设置FLOAT、DOUBLE类型数据按科学计数法显示的分界长度
SET FLOAT_SHOW <0(缺省值)| float_length>
当数据直接打印长度超过float_length时以科学计数法显示,否则直接显示
float_length取值范围为0~350,为0代表总是以科学计数法显示
3.3.31 CONSOLE_PRINT
控制台是否打印查询结果和执行时间,ON 是,OFF 否。缺省为 ON。
SET CONSOLE_PRINT <ON(缺省值)|OFF |OFF_WITH_TIME >
ON:是,打印执行结果和执行时间。缺省
OFF:否,既不打印执行结果,也不打印执行时间
OFF_WITH_TIME:否,不打印执行结果但是打印执行时间
3.3.32 SQLCODE
控制台是否打印SQLCODE返回值,ON是,OFF否。缺省为 OFF。SQLCODE 返回0表示当前SQL语句执行成功,SQLCODE返回1表示当前SQL语句执行失败。
SET SQLCODE <ON|OFF(缺省值)>
3.3.33 SQL_LINESHOW
输入多行 SQL 语句时,是否打印 SQL 语句的行号,ON 是,OFF 否。缺省为 ON
SET SQL_LINESHOW <ON(缺省值)|OFF>
3.3.34
空数据是否显示为NULL,ON是,OFF否。缺省为ON。
SET NULL_SHOW <ON(缺省值)|OFF>
3.3.35 SQLPROMPT
设置 DIsql 命令行的前缀标识
SET SQLPROMPT < text >
其中 _USER 和_connect_identifier 两个系统变量代表“系统用户名”和“IP 地址:
端口号”。
3.3.36 ISQL_MODE
结果集打印方式
SET ISQL_MODE <0(缺省值)|1|2>
0:DM 数据库的打印方式。缺省为 0
1:兼容 ORACLE 的打印格式
2:兼容 GP 的打印格式
3.3.37 WRAP
是否折行打印结果集,ON是,OFF否。缺省为ON。仅在ISQL_MODE为1时,该参数有效
SET WRAP <ON(缺省值)|OFF>
3.3.38 CTRL_INFO
设置 DIsql 的回显打印信息
SET CTRL_INFO <0(缺省值)|1|2|4>
0:没有特殊设置。缺省
1:控制-E不强制关闭行号、执行时间以及执行号等信息的展示
2:控制DIsql的回显信息按5列打印,具体如下:
- 第 1 列:语句的 SQL 类型,如:DELETE、UPDATE、SELECT 等;
- 第 2 列:语句的执行结果,执行成功则为 0,执行失败则为错误码;
- 第 3 列:语句的影响行数,DDL 和 PLsql 类型语句的影响行数均默认为 0,仅 DELETE、UPDATE、SELECT 类型语句存在具体的影响行数;
- 第 4 列:语句的执行时间;
- 第 5 列:语句执行失败时的错误信息,若语句执行成功,则不打印该列。设置为 2 时,不再打印执行过程中的报错信息。
4:控制语句块多个结果集全部自动显示,不需要通过 more 命令显示结果集。
支持使用上述有效值的组合值,如 7 表示同时控制 1、2 和 4。
3.3.39 RETRY_CONN
设置DIsql尝试自动重连的次数。该环境变量主要用于写自动化脚本,当连接失败导致SQL语句执行失败时,DIsql尝试自动重新连接数据库,如果在设置次数内连接成功,则重新执行相应 SQL 语句。需要注意的是,该环境变量与AUTORECONN并无关系。
SET RETRY_CONN <0(缺省值)|n>
0:不自动重连。缺省为0
n:自动重连的次数
3.3.40 RETRY_CONN_TIME
用于当 RETRY_CONN 为 n 时,设置 DIsql 自动重连的时间间隔
SET RETRY_CONN_TIME <0(缺省值)|n>
0:缺省值,无时间间隔进行重连
n:间隔 n 秒重连一次
3.3.41 ROWS
设置结果集最大显示行数,0表示不限制结果集最大显示行数
SET ROWS <0(缺省值)|n>
3.3.42 EXPLAIN_MODE
设置SQL执行方式。
按照EXPLAIN_MODE为1和2执行时,和EXPLAIN_MODE为0有两点不同:一spool 不会记录sql执行错误信息;二不支持@开头插入大对象数据文件的语句
SET EXPLAIN_MODE < 0|1|2 >
0:缺省值。正常执行 SQL 语句
1:按照EXPLAIN FOR方式执行,即在SQL语句前自动拼接上EXPLAIN FOR之后再执行
2:按EXPLAIN方式执行,即在SQL语句前自动拼接上EXPLAIN之后再执行
3.3.43 PREFIX_STR
设置 SQL 语句拼接前缀,在待执行的 SQL 语句前拼上指定字符再发给服务器执行。执行完成后,在 SQL 日志文件中记录的为带前缀的 SQL 语句。此参数的目的是为了让用户能够在日志中准确识别出具有同一前缀的 SQL 语句,进行日志分析。
SET PREFIX_STR < 0| text >
0:缺省值,不加前缀。
text:SQL 语句的拼接前缀。前缀必须是注释的形式:/xxx/。其他形式将报错。
3.4 SHOW命令查看环境变量
- 通过使用SHOW命令,用户就可以快速而方便的了解到DIsql环境的当前环境变量设置和初始化参数
- SHOW可以显示一个或多个变量。显示多个变量时中间加空格,当其中某一变量出错之后,后面的仍会继续显示
3.4.1 显示当前环境变量
显示指定的环境变量
SHOW <system_variable>{<system_variable>}
3.4.2 显示初始化参数
显示所有包含指定字符串的初始化参数
SHOW PARAMETER[S] [<parameter_name>]
<parameter_name>:包含在初始化参数名中的字符串。<PARAMETER_NAME>为空、单引号或双引号时,则显示所有初始化参数。若<PARAMETER_NAME>为多个字符串,字符串之间可用空格隔开,只有第一个字符串生效,后面的字符串会被忽略
3.5 使用配置文件设置环境变量
DIsql在连接成功数据库时会自动运行两个配置文件glogin.sql和 login.sql
glogin.sql文件中的设置永久生效,该配置文件需要用户自行创建在$DM_HOME/bin/disql_conf
路径下,其中$DM_HOME
为DM的安装目录,需要用户在操作系统配置DM_HOME环境变量,disql_conf目录需要用户自行创建。login.sql文件为用户自定义配置文件,对其存放路径不做限制。glogin.sql文件和login.sql文件的执行顺序如下:
- 默认在$DM_HOME/bin/disql_conf路径下查找glogin.sql文件并执行;
- 默认在当前工作目录下(注意不是DIsql工具所在的目录,而是启动DIsql时所在的目录)查找login.sql文件并执行,若未找到则执行步骤 3;
- 判断操作系统是否配置了DM_SQLPATH环境变量,如果配置了该变量则在对应路径下查找 login.sql 文件并执行
DIsql执行上述配置文件时并不会在DIsql窗口打印信息,如果没有找到上述配置文件则忽略
四、DISQL常用命令
4.1 帮助HELP
DIsql帮助命令,可以帮助用户查看其他命令的具体用法。用户可以看到其他命令系统显示的内容,概括为:
- 命令的标题
- 命令的文本描述
- 命令的简写(例如,AUTO 可以代替 AUTOCOMMIT)
- 可以向命令传递的强制参数和可选参数
HELP 显示指定命令的帮助信息
HELP|? [topic]
topic:命令名称或者命令名称的首字母,查询某一命令用法或者某一字母开头的所有命令用法
4.2 输出文件SPOOL
将查询结果输出到指定文件
SPOOL {<file> | OFF }
<file>::= <file_path> [CRE[ATE]|REP[LACE]|APP[END]][NO_PRINT]
<file_path>:指定文件的绝对路径
CRE[ATE]:创建指定的文件,若指定的文件已存在,则报错,默认方式
REP[LACE]:创建指定的文件,若指定的文件已存在,则替换它
APP[END]]:将输出内容追加到指定文件的末尾
NO_PRINT:控制台不打印查询结果
OFF:关闭 SPOOL 输出
4.3 切换到操作系统命令HOST
使用 HOST 命令可以不用退出 DIsql 就能执行操作系统命令。如果单独执行 host,
则能够直接从 DIsql 界面切换到操作系统,之后可使用 EXIT 回到 DIsql 界面
4.4 获取对象结构信息DESCRIBE
获取表或视图、存储过程、函数、包、记录、类的结构描述
DESC[RIBE] [<模式名>.]<对象名>;
各对象获取的内容略有不同:
- 表或视图获取的内容包括列名、列数据类型、列是否可以取空值
- 函数、过程、类获取的内容包括两类:1)存储函数/过程名,类型(函数或过程),函数返回值类型;2)参数名,参数数据类型、参数输入输出属性、参数缺省值
- 包获取的内容分为两类:1)包内存储函数/过程名,类型(函数或过程),函数返回值类型;2)包内参数名,参数数据类型、参数输入输出属性、参数缺省值
- 记录获取的内容为:参数名,参数数据类型,参数是否可以取空值
4.5 管理本地变量DEFINE,COLUMN和UNDEFINE
DEFINE
定义一个本地变量的替代变量,然后对该变量赋一个 CHAR 类型的值;或者输出变
量的值和类型
DEF[INE] [<VARIABLE=text>|<VARIABLE>]
DEF[INE] VARIABLE = text:申明一个变量,如果该变量存在,则重新赋值,否则新生成一个变量,并进行赋值
DEF[INE] VARIABLE:如果该变量存在,则输出特定VARIABLE的值和类型,否则报错
DEF[INE]:输出DIsql中所有的变量的值和类型,该命令定义的替代变量在当前的DIsql环境和/NOLOG环境中均可以起作用。
当使用该命令定义变量时,如果变量值包含空格或区分大小写,则用引号引注。另外,
使用“DEFINE 变量名”可以检查变量是否已经定义
DEFINE 定义的变量会保存在环境 DIsql 环境中,可以在 SQL 语句中使用。默认的变量前缀是&。
COLUMN
定义一个本地列或表达式
COL[UMN] [<column | expr> [<option>]]
<option> ::= NEW_VALUE variable |
FOR[MAT] <format>
<format> ::= An | an
- COL[UMN]:列举出所有的 COLUMN 变量信息
- COL[UMN] column | expr:列举出某个column或expr,存在则输出信息,否则报错
- COL[UMN] column | expr option:option目前仅支持NEW_VALUE和FORMAT
- NEW_VALUE:表示该column|expr的值同时作为变量variable存在。但如果该变量未赋值,通过DEFINE查询时,不会显示该变量。查询结果的最后一个值赋给变量variable
- FOR[MAT]:表示该 column|expr 的列打印长度。‘A’或‘a’是列打印长度的前
缀,n 是列打印长度的值,n 的取值范围为 1~60000。仅当 ISQL_MODE = 1 且 COLUMN
<column | expr> 为 ON 时,该参数有效。定长类型的列的打印长度不受该参数影响
UNDEFINE
删除一个或多个本地变量。此变量可以是DEFINE定义生成的本地变量,也可以是COLUMN 关联的本地变量
UNDEF[INE] <变量子句>
<变量子句>::=<变量名>{ <变量名>}
4.6 查看执行计划EXPLAIN
EXPLAIN <sql_clause>
4.7 设置异常处理方式WHENEVER
WHENEVER SQLERROR
CONTINUE [ COMMIT | ROLLBACK | NONE ] |
EXIT [ SUCCESS | FAILURE | WARNING | n | <variable> | : <bindvariable> ]
[ COMMIT | ROLLBACK ]
n 和的返回值受限于操作系统,在不同平台下,会有所不同。
4.8 查看下一个结果集MORE
当结果集过多,屏幕只能显示一个时,用户可以使用 MORE 命令切换到下一个结果集
MORE | MR
4.9 显示SQL语句或块信息LIST
显示最近执行的 SQL 语句或者 PL/SQL 块信息。不显示 DIsql 命令
L[IST] [n | n m | n * | n LAST | * | * n | * LAST | LAST] 或者;
n ,m :数值 SQL 行号。
*: 当前行号。
LAST: 最后一行。
4.10 插入大对象数据
@<插入语句>
@'path'
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 缓存信息。
五、如何在DISQL中使用脚本
5.1 编写脚本
使用一种文本编辑器来编写 SQL 脚本
5.2 使用START命令运行脚本
运行脚本必须使用命令。命令中与脚本有关的是<`运行脚本>和<start运行脚本>
<start>::=<`运行脚本>|<start 运行脚本>|<直接执行语句>
<`运行脚本>::=`<file_path> [<PARAMETER_VALUE>{ <PARAMETER_VALUE>}]
<start 运行脚本>::=START <file_path> [<PARAMETER_VALUE>{ <PARAMETER_VALUE>}]
<直接执行语句>::= -E "<SQL 语句>{;<SQL 语句>}"
- <file_path>:脚本的路径,建议使用绝对路径。
- <PARAMETER_VALUE>:传递进入脚本的参数值。
- 脚本可以在启动DIsql时就运行,或者在进入DIsql之后再运行。如果在启动时运
行,只能使用<`运行脚本>
;如果在进入DIsql之后,使用<`运行脚本>
或者<start运行脚本>
来运行脚本都可以
启动DIsql时运行脚本
进入DIsql后运行脚本
- DIsql在运行完脚本后会自动执行一个提交动作
5.3 使用EDIT命令编辑脚本
ED[IT][<file_name>]
- 如果指定文件不存在,则创建该文件
- 如果省略文件<file_name>,则只会修改缓冲区中的最后一条SQL语句
- DIsql 自动打开系统缺省的文本编辑器(WINDOWS 下使用 notepad),复制缓冲区中最后一条SQL 语句到文本中,这时用户可以对其中的内容进行编辑
- 修改完成之前,DIsql一直处于等待状态
- 修改完毕,保存文件后,被修改的内容就会被写入缓存区。这对于修改错误命令很方便
- 操作系统为LINUX或UNIX时,使用vi进行编辑
5.4 如何在脚本中使用变量
- 替换变量主要用来进行SQL、PLSQL与用户的交互,可以运行时输入,也可提前输入
- 替换变量前带有一个前缀标志符(默认是&),DIsql 在命令中遇到替换变量时,用真
实值去代替,相当于c语言中的宏定义。真实值来源于三个地方:
1.脚本参数带入
2.脚本中直接定义
3.用户动态输入 - DIsql中根据SET DEFINE命令开启本地变量功能并定义变量前缀符号。
- 默认符号&作为变量的前缀
详细用法查看DEFINE命令
5.4.1 脚本带参数值
在脚本中通过&n 来引用参数,n 为 1 表示为第一个参数,2 表示第二个参数,依次类推
例子:
5.4.2 脚本中定义参数值
5.4.3 接收用户交互式输入参数值
很多时候执行脚本时,我们希望有些信息根据脚本的提示,让用户动态输入。这种
情况非常好实现,满足下面两个条件即可
- 运行脚本时不带参数
- 脚本中不定义参数
5.5 使用PROMPT命令传递信息
- PROMPT命令会在屏幕上输出一行信息。这非常有助于在存储脚本中向用户传送信息
PROMPT <输出内容>