DM8达梦数据库dexp、dimp、disql使用手册
1、dexp与dimp
1.1 功能简介
DM数据库的备份还原包括两种类型:物理备份还原和逻辑备份还原。物理备份还原是对数据库的操作系统物理文件(如数据文件、控制文件和日志文件等)的备份还原。例如使用 RMAN工具进行的备份还原。物理备份还原请参考《DM8 备份与还原》。逻辑备份还原是对数据库逻辑组件(如表、视图和存储过程等数据库对象)的备份还原。例如使用dexp和dimp进行的备份还原。逻辑备份还原正是本书所要介绍的内容。
逻辑导出(dexp)和逻辑导入(dimp)是DM数据库的两个命令行工具,分别用来实现对DM数据库的逻辑备份和逻辑还原。逻辑备份和逻辑还原都是在联机方式下完成,联机方式是指数据库服务器正常运行过程中进行的备份和还原。dexp和 dimp是DM数据库自带的工具,只要安装了DM数据库,就可以在安装目录/dmdbms/bin 中找到。逻辑导出和逻辑导入数据库对象分为四种级别:数据库级、用户级、模式级和表级。四种级别独立互斥,不能同时存在。四种级别所提供的功能:
数据库级(FULL):导出或导入整个数据库中的所有对象。
用户级(OWNER):导出或导入一个或多个用户所拥有的所有对象。
模式级(SCHEMAS):导出或导入一个或多个模式下的所有对象。
表级(TABLES):导出或导入一个或多个指定的表或表分区
1.2 dexp逻辑导出
dexp工具可以对本地或者远程数据库进行数据库级、用户级、模式级和表级的逻辑备份。备份的内容非常灵活,可以选择是否备份索引、数据行和权限,是否忽略各种约束(外键约束、非空约束、唯一约束等),在备份前还可以选择生成日志文件,记录备份的过程以供查看。
dexp工具名称有两种写法dexp和dexpdp。两者语法完全相同。唯一的区别在于,dexp导出的文件必须存放在客户端,dexpdp导出的文件必须存放在服务器端。
1.2.1 使用 dexp 工具
dexp 工具需要从命令行启动。在 cmd 命令行工具中找到 dexp 所在安装目录/dmdbms/bin,输入 dexp 和参数后回车。参数在下一节详细介绍。
语法如下:
dexp PARAMETER=<value> { PARAMETER=<value> }
或
dexpdp PARAMETER=<value> { PARAMETER=<value> }
PARAMETER:dexp 参数。多个参数之间排列顺序无影响,参数之间使用空格间隔。
<value>:参数取值。
例 将用户名和密码均为 SYSDBA,IP 地址为 192.168.0.248,端口号为 8888 的数据库采用FULL方式完全导出。/user/data为数字证书路径。导出文件名db_str.dmp,导出的日志文件名为 db_str.log,导出文件的路径为/mnt/dexp/data。
./dexp USERID=SYSDBA/SYSDBA@192.168.0.248:8888#/user/data FILE=db_str.dmp
DIRECTORY=/mnt/dexp/data LOG=db_str.log FULL=Y
1.2.2 dexp 参数一览表
参数 | 含义 | 备注 |
---|---|---|
USERID | 数据库的连接信息 | 必选 |
FILE | 明确指定导出文件 | 名称可选。如果缺省该参数,则导出文件名为dexp.dmp |
DIRECTORY | 导出文件所在目录 | 可选 |
FULL | 导出整个数据库(N) | 可选,四者中选其一。缺省为SCHEMAS |
OWNER | 用户名列表,导出一个或多个用户所拥有的所有对象 | |
SCHEMAS | 模式列表,导出一个或多个模式下的所有对象 | |
TABLES | 表名列表,导出一个或多个指定的表或表分区 | |
FUZZY_MATCH | TABLES 选项是否支持模糊匹配(N) | 可选 |
QUERY | 用于指定对导出表的数据进行过滤的条件。 | 可选 |
PARALLEL | 用于指定导出的过程中所使用的线程数目 | 可选 |
TABLE_PARALLEL | 用于指定导出每张表所使用的线程数,在 MPP 模式下会转换成单线程 | 可选 |
TABLE_POOL | 用于设置导出过程中存储表的缓冲区个数 | 可选 |
EXCLUDE | 1. 导出内容中忽略指定的对象。对象有CONSTRAINTS、INDEXES、ROWS、TRIGGERS和 GRANTS。比如:EXCLUDE= (CONSTRAINTS,INDEXES) 2. 忽略指定的表,使用 TABLES:INFO 格式,如果使用表级导出方式导出,则使用TABLES:INFO 格式的 EXCLUDE 无效。例如:EXCLUDE= TABLES :table1,table2 3. 忽略指定的模式,使用SCHEMAS:INFO格式,如果使用表级,模式级导出方式导出,则使用SCHEMAS:INFO 格式的 EXCLUDE 无效。例如:EXCLUDE=SCHEMAS :SCH1,SCH2 4.忽略指定的视图,使用 VIEWS:INFO 格式。例如:EXCLUDE= VIEWS:view1,view2 | 可选 |
INCLUDE | 导出内容中包含指定的对象,例如:INCLUDE=(CONSTRAINTS,INDEXES) 或者INCLUDE=TABLES:table1,table2 | 可选 |
CONSTRAINTS | 导出约束 (Y) | 可选。此处单独设置与和EXCLUDE/INCLUDE 中批量设置功能一样。设置一个即可 |
TABLESPACE | 导出的对象定义是否包含表空间(N) | |
GRANTS | 导出权限 (Y) | |
INDEXES | 导出索引 (Y) | |
TRIGGERS | 导出触发器(Y) | |
ROWS | 导出数据行 (Y) | |
LOG | 明确指定日志文件名称 | 可选,如果缺省该参数,则导出文件名为dexp.log |
NOLOGFILE | 不使用日志文件(N) | 可选 |
NOLOG | 屏幕上不显示日志信息(N) | 可选 |
LOG_WRITE | 日志信息实时写入文件 (N) | 可选 |
DUMMY | 交互信息处理: 打印§,所有交互都按 YES 处理(Y),NO(N)。缺省为 NO,不打印交互信息 | 可选 |
PARFILE | 参数文件名,如果 dexp 的参数很多,可以存成参数文件 | 可选 |
FEEDBACK | 每 x 行显示进度 (0) | 可选 |
COMPRESS | 是否压缩导出数据文件(N) | 可选 |
ENCRYPT | 导出数据是否加密 (N) | 可选,和 ENCRYPT 同时使用 |
ENCRYPT_PASSWORD | 导出数据的加密密钥 | |
ENCRYPT_NAME | 导出数据的加密算法 | 可选。和 ENCRYPT、ENCRYPT_PASSWORD 同时使用。缺省为 RC4 |
FILESIZE | 用于指定单个导出文件大小的上限。可以按字节[B]、K[B]、M[B]、G[B]的方式指定大小 | 可选 |
FILENUM | 多文件导出时,一个模板可以生成文件数,范围为[1,99],缺省为 99 | 可选 |
DROP | 导出后删除原表,但不级联删除 (N) | 可选 |
DESCRIBE | 导出数据文件的描述信息,记录在数据文件中 | 可选 |
FLASHBACK_SCN | 用于指定导出表数据的闪回 LSN,和FLASHBACK_TIME 一起使用时只有一个能生效,参数位置靠后的生效 | 可选 |
FLASHBACK_TIME | 用于指定导出表数据的闪回时间,和FLASHBACK_SCN 一起使用时只有一个能生效,参数位置靠后的生效 | 可选 |
COL_DEFAULT_SEPARATE | 是否单独导出列,缺省值 (Y) | 可选 |
WITH_UR | 导出表数据是否允许脏读(N) | 可选 |
SIMPLE_LOG | 导出日志是否使用简要日志(N) | 可选 |
CTRL_INFO | 控制信息用来控制一些特殊情况导出,缺省为 0 | 可选 |
HELP | 显示帮助信息 | 可选 |
1.3 dimp逻辑导入
dimp 逻辑导入工具利用 dexp 工具生成的备份文件对本地或远程的数据库进行联机逻辑还原。dimp 导入是 dexp 导出的相反过程。还原的方式可以灵活选择,如是否忽略对象存在而导致的创建错误、是否导入约束、是否导入索引、导入时是否需要编译、是否生成日志等。
dimp 工具名称有两种写法 dimp 和 dimpdp。两者语法完全相同。唯一的区别在于,dimp 导入的文件必须存放在客户端,dimpdp 导入的文件必须存放在服务器端。
1.3.1 使用 dimp 工具
dimp 工具需要从命令行启动。在 cmd 命令行工具中找到 dimp 所在安装目录/dmdbms/bin,输入 dimp 和参数后回车。参数在下一节详细介绍。
语法如下:
dimp PARAMETER=value { PARAMETER=value }
或
dimpdp PARAMETER=value { PARAMETER=value }
PARAMETER:dimp 参数。多个参数之间排列顺序无影响,参数之间使用空格间隔。
value:参数取值。
例 将逻辑备份采用 FULL 方式完全导入到用户名和密码为 SYSDBA,IP 地址为192.168.0.248,端口号为 8888 的数据库。导入文件名为 db_str.dmp,导入的日志文件名为 db_str.log,路径为/mnt/data/dexp。
./dimp USERID=SYSDBA/SYSDBA@192.168.0.248:8888 FILE=db_str.dmp
DIRECTORY=/mnt/data/dexp LOG=db_str.log FULL=Y
1.3.2 dexp 参数一览表
参数 | 含义 | 备注 |
---|---|---|
USERID | 数据库的连接信息 | 必选 |
FILE | 输入文件,即 dexp 导出的文件 | 必选 |
DIRECTORY | 导入文件所在目录 | 可选 |
FULL | 导入整个数据库 | 可选,四者中选其一。缺省为 SCHEMAS |
OWNER | 导入指定的用户名下的模式 | |
SCHEMAS | 导入的模式列表 | |
TABLES | 表名列表,指定导入的 tables 名称。不支持对外部表进行导入 | |
PARALLEL | 用于指定导入的过程中所使用的线程数目 | 可选 |
TABLE_PARALLEL | 用于指定导入的过程中每个表所使用的子线程数目 | 可选。在 FAST_LOAD为 Y 时有效 |
IGNORE | 忽略创建错误(N)。如果表已经存在则向表中插入数据,否则报错表已经存在。 | 可选 |
TABLE_EXISTS_ACTION | 需要的导入表在目标库中存在时采取的操作[SKIP| APPEND | TRUNCATE | REPLACE | TRUNCATE_CASCADE] | 可选 |
FAST_LOAD | 是否使用 dmfldr 进行数据导入(N) | 可选 |
FLDR_ORDER | 使用 dmfldr 是否需要严格按顺序来导数据(Y) | 可选 |
COMMIT_ROWS | 批量提交的行数(5000) | 可选 |
EXCLUDE | 忽略指定的对象(CONSTRAINTS,INDEXES,ROWS,TRIGGERS,GRANTS)。格式EXCLUDE=(CONSTRAINTS,INDEXES,ROWS,TRIGGERS,GRANTS) | 可选。例如EXCLUDE=(CONSTRAINT) |
GRANTS | 导入权限 (Y) | 可选 |
CONSTRAINTS | 导入约束 (Y) | 可选 |
INDEXES | 导入索引 (Y) | 可选 |
TRIGGERS | 导入触发器(Y) | 可选 |
ROWS | 导入数据行 (Y) | 可选 |
LOG | 日志文件 | 可选 |
NOLOGFILE | 不使用日志文件(N) | 可选 |
NOLOG | 屏幕上不显示日志信息(N) | 可选 |
DUMMY | 交互信息处理: 打印§。取值 Y/N。Y:打印所有交互信息。N:不打印交互信息。 | 可选 |
LOG_WRITE | 日志信息实时写入文件(N) | 可选 |
PARFILE | 参数文件名,如果 dimp 的参数很多,可以存成参数文件 | 可选 |
FEEDBACK | 显示每 x 行 (0) 的进度 | 可选 |
COMPILE | 编译过程,程序包和函数 (Y) | 可选 |
INDEXFILE | 将表的索引/约束信息写入指定的文件 | 可选 |
INDEXFIRST | 导入时先建索引(N) | 可选 |
REMAP_SCHEMA | SOURCE_SCHEMA:TARGET_SCHEMA 将SOURCE_SCHEMA 中的数据导入到 TARGET_SCHEMA 中 | 可选 |
ENCRYPT_PASSWORD | 数据的加密密钥 | 可选。和 dexp 中的ENCRYPT_PASSWORD设置的密钥一样 |
ENCRYPT_NAME | 数据的加密算法的名称 | 可选。和 dexp 中的ENCRYPT_NAME 设置的加密算法一样 |
SHOW/ DESCRIBE | 只列出文件内容 (N) | 可选 |
TASK_THREAD_NUMBER | 设置 dmfldr 处理用户数据的线程数目 | 可选 |
BUFFER_NODE_SIZE | 设置 dmfldr 读入文件缓冲区大小 | 可选 |
TASK_SEND_NODE_NUMBER | 用于设置 dmfldr 发送节点个数[16,65535] | 可选 |
LOB_NOT_FAST_LOAD | 如果一个表含有大字段,则不使用 dmfldr (N) | 可选 |
PRIMARY_CONFLICT | 主键冲突的处理方式[IGNORE |OVERWRITE | OVERWRITE2],默认报错 | 可选 |
TABLE_FIRST | 是否强制先导入表 (缺省 N),Y 表示先导入表,N 正常导入 | 可选 |
SHOW_SERVER_INFO | 是否显示服务器信息(缺省 N),Y 表示显示导出文件对应服务器信息,实际不导入,N 表示不显示导出文件对应服务器信息,正常导入 | 可选 |
IGNORE_INIT_PARA | 不忽略建库参数差异(0),忽略 CASE_SENSITIVE(1),忽略 LENGTH_IN_CHAR(2),忽略 CASE_SENSITIVE和 LENGTH_IN_CHAR(3) | 可选 |
AUTO_FREE_KEY | 导入数据完成后, 是否释放密钥(N):是(Y), 否(N) | 可选 |
REMAP_TABLE | 格式(SOURCE_SCHEMA.SOURCE_TABLE:TARGET_TABLE),将 SOURCE_TABLE 中的数据导入到 TARGET_TABLE中 | 可选 |
REMAP_TABLESPACE | 格式(SOURCE_TABLESPACE:TARGET_TABLESPACE) 将 SOURCE_TABLESPACE 表空间映射到TARGET_TABLESPACE 表空间中 | 可选 |
SIMPLE_LOG | 导入日志是否使用简要日志(N) | 可选 |
HELP | 显示帮助信息 | 可选 |
2、disql
2.1 功能简介
DIsql 是 DM 数据库的一个命令行客户端工具,用来与 DM 数据库服务器进行交互。DIsql 是 DM 数据库自带的工具,只要安装了 DM 数据库,就可以在应用菜单和安装目录中找到。
DIsql 识别用户输入,将用户输入的 SQL 语句打包发送给 DM 数据库服务器执行,并接收服务器的执行结果,并按用户的要求将执行结果展示给用户。为了更好地与用户交互和展示执行结果,用户也可以在 DIsql 中执行 DIsql 命令,这些命令由 DIsql 工具自身进行处理,不被发送给数据库服务器。
SQL 语句在 DIsql 中执行完后都被保存在一个特定的内存区域中,用户可以通过上下键查找到这些保存在内存中的 SQL 语句(某些操作系统可能不支持此操作),并可以进行修改,然后再次执行。DIsql 命令执行完后不保存在内存区域中。
SQL 语句 | DIsql 命令 |
---|---|
ANSI 标准 | DM 内部标准 |
语言 | 命令 |
关健字不可缩写 | 关健字可缩写 |
部分语句以分号结束,部分语句以/结束 | 分号可有可无,/完全用不到 |
可以更新表中的数据 | 不能更新表中的数据 |
SQL 语句的用法在《DM8_SQL 语言使用手册》中详细说明。
2.1.1 命令行启动DIsql
为了使用 DIsql,必须首先要启动 DIsql。DIsql 工具可以广泛用于各种操作系统,
如 WINDOWS、LINUX 等。
启动之后,当出现“SQL>”符号时,用户就可以利用 DM 提供的 SQL 语句和数据库进行交互操作了,需要注意的是,在 DIsql 中 SQL 语句应以分号“;”结束。对于执行语句块,创建触发器、存储过程、函数、包以及模式等时需要用“/”结束。
DIsql在安装目录/bin文件下,输入 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>={,<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 命令>”
文中语法符号规定:<>内的内容是必选项;[]内的内容是可选项;{}内的内容可以出现一次或多次;|为或者;::=为定义符。后文语法用法与此相同。
<password>中特殊字符的书写规范:
- 不同的操作系统
1)WINDOWS 系统
DIsql 的关键字符,DIsql 的要求对连接串的特殊字符需要使用双引号括起来"aaaa/aaaa",操作系统的要求需要再在最外加双引号和转义"““aaaa/aaaa””“。
空格,需要使用双引号括起来作为一个整体(这是操作系统的要求)。
双引号,DIsql 要求对双引号需要使用双引号括起来,同时双引号需要转义"aaaa”“aaaa”;操作系统要求再对双引号转义和最外层加双引号"““aaaa””““aaaa””"。
2)LINUX 系统
LINUX 环境下,密码中的特殊字符处理过程既要考虑操作系统的要求,又要考虑
DIsql 的要求。
首先,操作系统的要求。
bash 的引号设计为:在单引号中,所有的特殊字符都失去其特殊含义;在双引号中,
特殊字符包括:美元符($)、反引号(`)、转义符(\)、感叹号(!)。
如果密码中没有单引号的,只有外面加单引号就可以解决了;如果密码只有单引号,那么可以将单引号用双引号括起来;如果既有单引号又有美元符($)、反引号(`)、转义符(\)、感叹号(!)四个特殊字符,那么在特殊字符之前全部加\转义就好了。
其次,在操作系统要求的基础上,增加 DIsql 对关键字和双引号的要求。
DIsql 的关键字符,DIsql 的要求对连接串的特殊字符需要使用双引号括起来。
双引号,DIsql 要求对双引号需要使用双引号括起来,同时双引号需要转义。
单引号,根据操作系统的要求,只能将单引号放入双引号中。
单引号+操作系统下的特殊字符,根据操作系统的要求,因为单引号只能放在双引号内,同时双引号中还有一些特殊字符不能被识别需要加反斜杠转义。
单引号+双引号,根据操作系统的要求,单引号需要放在双引号中,在双引号中表示双引号则使用反斜杠转义双引号。 - 如何转义双引号
1)DIsql 的要求使用双引号对双引号内的双引号转义。
2)WINDOWS 命令行,使用双引号或者反斜杠对双引号内的双引号转义。
3)LINUX 命令行,使用反斜杠对双引号内的双引号转义。
2.1.2 切换登录
用户进入 DIsql 界面后,如果想切换到其他 DM 数据库实例。有两种实现方式:一是使用LOGIN 命令;二是使用 CONN 命令。登录到远程数据库,必须在服务名处使用 IP 地址或网络服务名。
在 DIsql 界面中,使用 LOGIN/LOGOUT 命令登录/退出远程数据库。
CONN[ECT] /DISCONN[ECT]
- CONN[ECT] 连接
在 DIsql 界面中,使用 CONN[ECT]命令登录远程数据库。
语法如下:
CONN[ECT] <logon>
<logon>::={{<username>[/<password>]} | /}[@<connect_identifier>][<option>]
[<os_auth>]
<connect_identifier> ::=<svc_name> | {<host>[:<port>]} | <unixsocket_file>
<option>::= #{ <exetend_option>={,<extend_option>=<value>} } //此行外层
{}是为了封装参数之用,书写时需要保留
<os_auth>::= AS {SYSDBA|SYSSSO|SYSAUDITOR|USERS|AUTO}
使用 CONN[ECT]命令建立新会话时,会自动断开先前会话。
示例如下:
SQL>CONN SYSDBA/SYSDBA@192.168.1.150
- DISCONN[ECT] 断开连接
DISCONN[ECT]:断开连接而不退出 DIsql。与 logout 功能一样。
SQL>DISCONN
2.1.3 使用DIsql
以一个简单的查询例子来说明如何使用 DIsql。只需要输入一条 SQL 语句,回车即可。DIsql 将 SQL 语句发送给 DM 数据库服务器并显示服务器返回的结果。SQL 语句如何书写请参考《DM8_SQL 语言使用手册》。
SQL>select top 5 name,id from sysobjects;
执行结果如下:
行号 NAME ID
---------- ---------- -----------
1 SYSOBJECTS 0
2 SYSINDEXES 1
3 SYSCOLUMNS 2
4 SYSUSER$ 3
5 SYSCONS 4
已用时间: 0.415(毫秒). 执行号:518.
2.1.4 退出DIsql
使用 EXIT/QUIT 命令,退出 DIsql。
语法如下:
EXIT|QUIT
示例如下:
SQL>EXIT
2.2 DIsql常用命令
2.2.1 帮助 HELP
DIsql 帮助命令,可以帮助用户查看其他命令的具体用法。用户可以看到其他命令系统显示的内容,概括为:
命令的标题
命令的文本描述
命令的简写(例如,AUTO 可以代替AUTOCOMMIT)
可以向命令传递的强制参数和可选参数
HELP 显示指定命令的帮助信息。
语法如下:
HELP|? [topic]
topic:命令名称或者命令名称的首字母,查询某一命令用法或者某一字母开头的所有命令用法。
2.2.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 输出
2.2.3 切换到操作系统命令 HOST
使用 HOST 命令可以不用退出 DIsql 就能执行操作系统命令。如果单独执行 host,则能够直接从 DIsql 界面切换到操作系统,之后可使用 EXIT 回到 DIsql 界面。
语法如下:
HOST[<command>]
<command>:操作系统命令。
2.2.4 获取对象结构信息 DESCRIBE
获取表或视图、存储过程、函数、包、记录、类的结构描述。
语法如下:
DESC[RIBE] [<模式名>.]<对象名>;
各对象获取的内容略有不同:
表或视图获取的内容包括列名、列数据类型、列是否可以取空值。
函数、过程、类获取的内容包括两类:1)存储函数/过程名,类型(函数或过程),函数返回值类型;2)参数名,参数数据类型、参数输入输出属性、参数缺省值。
包获取的内容分为两类:1)包内存储函数/过程名,类型(函数或过程),函数返回值类型;2)包内参数名,参数数据类型、参数输入输出属性、参数缺省值。
记录获取的内容为:参数名,参数数据类型,参数是否可以取空值。
2.2.5 管理本地变量 DEFINE,COLUMN 和 UNDEFINE
定义本地变量的命令有 DEFINE 和 COLUMN。
删除本地变量的命令是 UNDEFINE。
2.2.5.1 DEFINE
用来定义一个本地变量的替代变量,然后对该变量赋一个 CHAR 类型的值;或者输出变
量的值和类型。
语法如下:
DEF[INE] [<VARIABLE=text>|<VARIABLE>]
DEF[INE] VARIABLE = text:申明一个变量,如果该变量存在,则重新赋值,否则新生成一个变量,并进行赋值。
DEF[INE] VARIABLE:如果该变量存在,则输出特定 VARIABLE 的值和类型,否则报错。
DEF[INE]:输出 DIsql 中所有的变量的值和类型。
该命令定义的替代变量在当前的 DIsql 环境和/NOLOG 环境中均可以起作用。
当使用该命令定义变量时,如果变量值包含空格或区分大小写,则用引号引注。另外,使用“DEFINE 变量名”可以检查变量是否已经定义。
DEFINE 定义的变量会保存在环境 DIsql 环境中,可以在 SQL 语句中使用。默认的变量前缀是&。
2.2.5.2 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 时,该参数有效。定长类型的列的打印长度不受该参数影响。
2.2.5.3 UNDEFINE
删除一个或多个本地变量。此变量可以是 DEFINE 定义生成的本地变量,也可以是COLUMN 关联的本地变量。
语法如下:
UNDEF[INE] <变量子句>
<变量子句>::=<变量名>{ <变量名>}
2.2.6 查看执行计划 EXPLAIN
用 EXPLAIN 命令来查看查询语句的执行计划。
语法如下:
EXPLAIN <sql_clause>
<sql_clause>请参考《DM8_SQL 语言使用手册》。
2.2.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 之间。
2.2.8 查看下一个结果集 MORE
当结果集过多,屏幕只能显示一个时,用户可以使用 MORE 命令切换到下一个结果集。
MORE | MR
2.2.9 显示 SQL 语句或块信息 LIST
显示最近执行的 SQL 语句或者 PL/SQL 块信息。不显示 DIsql 命令。
语法如下:
L[IST] [n | n m | n * | n LAST | * | * n | * LAST | LAST] 或者;
n ,m :数值 SQL 行号。
*: 当前行号。
LAST: 最后一行。
2.2.10 插入大对象数据
当插入语句中包含大对象数据文件时,使用@。
@<插入语句>
<插入语句>,请参考《DM8_SQL 语言使用手册》,其中大数据的插入值格式为:@‘path’
2.2.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 缓存信息。