欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

disql

最编程 2024-01-09 18:55:29
...

2.1 功能简介

  DIsql 是 DM 数据库的一个命令行客户端工具,用来与 DM 数据库服务器进行交互。DIsql 是 DM 数据库自带的工具,只要安装了 DM 数据库,就可以在应用菜单和安装目录中找到。
  DIsql 识别用户输入,将用户输入的 SQL 语句打包发送给 DM 数据库服务器执行,并接收服务器的执行结果,并按用户的要求将执行结果展示给用户。为了更好地与用户交互和展示执行结果,用户也可以在 DIsql 中执行 DIsql 命令,这些命令由 DIsql 工具自身进行处理,不被发送给数据库服务器。
  SQL 语句在 DIsql 中执行完后都被保存在一个特定的内存区域中,用户可以通过上下键查找到这些保存在内存中的 SQL 语句(某些操作系统可能不支持此操作),并可以进行修改,然后再次执行。DIsql 命令执行完后不保存在内存区域中。

表 2.1 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. 不同的操作系统
    1)WINDOWS 系统
      DIsql 的关键字符,DIsql 的要求对连接串的特殊字符需要使用双引号括起来"aaaa/aaaa",操作系统的要求需要再在最外加双引号和转义"““aaaa/aaaa””“。
      空格,需要使用双引号括起来作为一个整体(这是操作系统的要求)。
      双引号,DIsql 要求对双引号需要使用双引号括起来,同时双引号需要转义"aaaa”“aaaa”;操作系统要求再对双引号转义和最外层加双引号"““aaaa””““aaaa””"。
    2)LINUX 系统
      LINUX 环境下,密码中的特殊字符处理过程既要考虑操作系统的要求,又要考虑
    DIsql 的要求。
      首先,操作系统的要求。
      bash 的引号设计为:在单引号中,所有的特殊字符都失去其特殊含义;在双引号中,
    特殊字符包括:美元符($)、反引号(`)、转义符(\)、感叹号(!)。
    如果密码中没有单引号的,只有外面加单引号就可以解决了;如果密码只有单引号,那么可以将单引号用双引号括起来;如果既有单引号又有美元符($)、反引号(`)、转义符(\)、感叹号(!)四个特殊字符,那么在特殊字符之前全部加\转义就好了。
      其次,在操作系统要求的基础上,增加 DIsql 对关键字和双引号的要求。
      DIsql 的关键字符,DIsql 的要求对连接串的特殊字符需要使用双引号括起来。
      双引号,DIsql 要求对双引号需要使用双引号括起来,同时双引号需要转义。
      单引号,根据操作系统的要求,只能将单引号放入双引号中。
      单引号+操作系统下的特殊字符,根据操作系统的要求,因为单引号只能放在双引号内,同时双引号中还有一些特殊字符不能被识别需要加反斜杠转义。
      单引号+双引号,根据操作系统的要求,单引号需要放在双引号中,在双引号中表示双引号则使用反斜杠转义双引号。
  2. 如何转义双引号
    1)DIsql 的要求使用双引号对双引号内的双引号转义。
    2)WINDOWS 命令行,使用双引号或者反斜杠对双引号内的双引号转义。
    3)LINUX 命令行,使用反斜杠对双引号内的双引号转义。

2.1.2 切换登录

  用户进入 DIsql 界面后,如果想切换到其他 DM 数据库实例。有两种实现方式:一是使用LOGIN 命令;二是使用 CONN 命令。登录到远程数据库,必须在服务名处使用 IP 地址或网络服务名。
  在 DIsql 界面中,使用 LOGIN/LOGOUT 命令登录/退出远程数据库。
  CONN[ECT] /DISCONN[ECT]

  1. 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
  1. 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 缓存信息。

达梦数据库 | 达梦在线服务平台