disql 介绍
DIsql 识别用户输入,将用户输入的 SQL 语句打包发送给 DM 数据库服务器执行,并接收服务器的执行结果,并按用户的要求将执行结果展示给用户。为了更好地与用户交互和展示执行结果,用户也可以在 DIsql 中执行 DIsql 命令,这些命令由 DIsql 工具自身进行处理,不被发送给数据库服务器。
SQL 语句在 DIsql 中执行完后都被保存在一个特定的内存区域中,用户可以通过上下键查找到这些保存在内存中的 SQL 语句,并可以进行修改,然后再次执行。DIsql 命令执行完后不保存在内存区域中。
disql 使用
disql 中 sql 语句必须用分号;结尾,执行语句块、创建触发器、存储过程、函数、包、模式等时需要使用 / 结尾。默认不会自动提交,(例外:alter user 、alter tablespace、refresh materialized view 总是自动提交)。手动提交模式下,遇到 DDL 语句时,DM 数据库会自动提交前面的事务(DDL:CREATE、ALTER、TRUNCATE、DROP、GRANT、REVOKE、审计设置语句)
./disql -h 查看 disql 帮助信息。
启动 sql:
disql[ [] [ | /NOLOG] [] ]
::=-S|-L ::=[/][*][@][:][?{UDP| TCP|IPC|RDMA}][#@ssl_pwd] ::=<`运行脚本>|[#@ssl_pwd]
通信加密中客户端证书存放的地址和客户端证书密钥。各用户只能使用自己的证书,例如 SYSDBA 账户只能使用\bin\CLIENT_SSL\SYSDBA 下的证书和密码,如果证书没有密码可以用缺省或任意数字代替。
例子:
./disql username/password@192.168.1.110:5236
关于密码中的特殊字符:
disql 要求:
字符串中如果有关键字符,必须用双引号括起来。
如果有双引号需要用双引号转义:即 “” 代表 "
disql 特殊字符:指密码串中含有的关键字符(/@:#*[]) 或双引号"
windows 操作系统要求
含有双引号的字符串:用 " 或者 \ 转义
含有特殊字符(比如空格)的字符串:用双引号把字符串括起来。
windows 常见的特殊字符:
@ 命令行回显屏蔽符 % 批处理变量引导符
重定向符 >> 重定向符 < 、>&、<& 重定向符
| 命令管道符 ^ 转义字符 & 组合命令 && 组合命令
|| 组合命令 “” 字符串界定符 , 逗号 ; 分号 () 括号 ! 感叹号
linux 操作系统要求:
bash 的引号设计为:在单引号中,所有的特殊字符都失去其特殊含义;在双引号中,特殊字符包括:美元符(KaTeX parse error: Can't use function '\)' in math mode at position 14: )、反引号(`)、转义符(\̲)̲、感叹号(!)。 • 如果字符…、`、\ 、! 特殊字符之一,由于只能用双引号括起来,
同时由于双引号中的上述四个字符没有失去特殊含义,导致无法正确识别。因此需要使用 \将这些特殊字符转义。
• 如果字符串内有双引号:用 \ 转义。
linux 常见特殊符号:
; ;; ., / ! $ ${} $? $$ $* ~
/ " * ** ? : ^ $# $@ command
{} [] [[]] () (())
|| && | & \<…\> + - %= == != > >> < <<
常用命令:
• help
help [topic]
topic:命令名称或者命令名称的首字母,查询某一命令用法或者某一字母开头的所有命令用法。
• more
查看下一个结果集
• list显示 sql 语句或 pl/sql 块信息
语法: l[ist] 或 ;
• describe
获取表或视图、存储过程、函数、包、记录、类的结构描述。
desc[ribe]
• host
使用 HOST 命令可以不用退出 DIsql 就能执行操作系统命令。如果单独执行 host,则能够直接从 DIsql 界面切换到操作系统,之后可使用 EXIT 回到DIsql 界面。
语法如下:
HOST[]
:操作系统命令。
• login/logout
login 后面不能带别的东西
logout:断开连接而不退出 disql
• connect/disconnect
CONN[ECT]命令与 login 命令相似,增加的功能是:
CONN[ECT]
::={[/][*<MPP_TYPE>][@<connect_identifier >]}|{/ AS <SYSDBA|SYSSSO|SYSAUDITOR|AUTO>}
<connect_identifier>::=[][:][?{UDP|TCP|IPC|RDMA}][#][@]
使用 CONN[ECT]命令建立新会话时,会自动断开先前会话。
disconnect:断开连接而不退出 disql
• set
设置 disql 中的环境变量,常见如下(完整版见手册):
set auto[commit] <on|off(默认)>;设置自动提交
set echo <on|off>; --显示脚本中正在执行的 sql 语句
set feed[back] <6(默认值)|n|ON|OFF>;–显示当前 sql 语句查询或修改的行数
set hea[ding] <ON(默认值)|OFF>; --显示列标题。
set lineshow <ON 默认值|OFF>; --显示行号
set pages[ize] <14(默认值)|n>; --设置一页有多少行数
set timing <ON(默认值)|OFF>;–显示每个 sql 语句花费的执行时间 settime off;–显示系统的当前时间份 set linesize 1000;–设置屏幕上行显示宽度
set char_code <GBK | GB18030| UTF8 | DEFAULT(默认值,操作系统的编码方式)>; --设置 sql 语句的编码方式
set colsep [text];设置列之间的分割符。缺省为一个空格
set keepdata <ON|OFF(默认值)>;–是否保持数据的原始格式,或为数据对齐进行优化,或者。on:不优化 off:优化
SET DEFINE<c(默认的变量前缀是&)|ON(默认值)|OFF>
c(字符):表示打开 DEFINE 功能,同时定义前缀变量符号,c 为定义的前缀符号。
ON:表示打开 DEFINE 功能,使用默认前缀符号&。
OFF:表示不使用 DEFINE 功能。
比如:SET DEFINE #
• show
SHOW <system_variable> {<system_variable>}
SHOW 可以显示一个或多个环境变量。显示多个变量时中间加空格,当其中某一变量出错之后,后面的仍会继续显示。
• define
DEF[INE] [<VARIABLE=text>|< VARIABLE >]
DEF[INE] VARIABLE = text:申明一个变量,如果该变量存在,则重新赋值,否则新生成一个变量,并进行赋值。
DEF[INE] VARIABLE:如果该变量存在,则输出特定 VARIABLE 的值和类型,否则报错。
DEF[INE]:输出 DIsql 中所有的变量的值和类型。
• exit/quit
退出 disql。
• clear
CLEAR
option::= [COL[UMNS] | SQL | SCR[EEN] | BUFF[ER]]
COL[UMNS]:清理所有的 COLUMN 变量信息。
SQL:清理本地 SQL 缓存信息。
SCR[EEN]:清理 DIsql 终端屏幕信息。
• spool
将屏幕显示的内容输出到指定文件。
SPOOL { | OFF } : : = <file_path> [CRE[ATE]|REP[LACE]|APP[END]]
CRE[ATE]:创建指定的文件,若指定的文件已存在,则报错,默认方式
REP[LACE]:创建指定的文件,若指定的文件已存在,则替换它
APP[END]]:将输出内容追加到指定文件的末尾
OFF:关闭 SPOOL 输出
只有 SPOOL OFF 之后,才能在输出文件中看到输出的内容。
运行脚本
如果在启动时运行,只能使用<运行脚本>;如果在进入 DIsql 之后,使用 <
运行脚本>或者<start 运行脚本>来运行脚本都可以。
<运行脚本>|<start 运行脚本>|<直接执行语句> <
运 行 脚 本 >::=<file_path> [<PARAMETER_VALUE> { <PARAMETER_VALUE>}] <start 运行脚本 >::=START <file_path> [<PARAMETER_VALUE> { <PARAMETER_VALUE>}] <直接执行语句>::= -E “<SQL 语句> {;<SQL 语句>}” 比如: ./disql SYSDBA/SYSDBA\
/dev/test.sql
编辑脚本
DIsql 中使用 EDIT 命令来编辑指定的脚本文件。
语法如下:
ED[IT] [<file_name>]
<file_name>:指定待编辑的脚本文件。
如果指定文件不存在,则创建该文件。
如果省略文件<file_name>,则只会修改缓冲区中的最后一条 SQL 语句。DIsql 自动打开系统缺省的文本编辑器(WINDOWS 下使用 notepad),复制缓冲区中最后一条 SQL 语句到文本中,这时用户可以对其中的内容进行编辑。修改完成之前,DIsql 一直处于等待状态。修改完毕,保存文件后,被修改的内容
就会被写入缓存区。这对于修改错误命令很方便。当操作系统为 LINUX 或UNIX 时,使用 vi 进行编辑。
脚本参数使用
• 脚本中定义和引用参数
在脚本中通过&n 来引用参数,n 为 1 表示为第一个参数,2 表示第二个参数。
• define 定义变量
DEFINE 标识符 = 值
如:define num=1
define str=hello
引用:&num(默认是&)
select * from test where id=#
select ‘&str’ from test;
• disql 中向脚本传入参数
如果传入参数值个数不匹配,如 n 为 3,但执行时只带了 2 个参数,DIsql就会在屏幕上提示输入参数。
因为参数是原样替换,因此如果 SQL 语句中字符串要求用单引号,那么定义的参数值也应该包含单引号;另外如果字符串中有特殊字符,需要使用双引号将整个字符串作为一个整体,需要注意的是,如果作为整体的字符串中有双引号作为内容,需要将内容的双引号转义。
如果参数值是数字,写法没有特殊要求。如果参数值是字符串,应该用单引号扩起,如果字符串有空格,应该在单引号外面,再加上一个双引号扩起。
• promrt
PROMPT <输出内容> 在屏幕上输出一行信息
社区地址:https://eco.dameng.com