最近在学习DM 数据库的各类工具,包括初始化工具dminit,快速数据装载命令行工具dmfldr,逻辑导出/导入工具dexp/dimp,以及数据库交互工具disql等。在此首先分享自己学习的成果,尝试对disql工具加以实践、精炼,供初学者使用。
disql 是一个DM 数据库服务器交互工具,并且无需特殊安装,在安装DM数据库 之后即可在安装目录中找到。disql负责向数据库服务器转交用户提交的SQL语句,并向用户展示其执行结果。disql中提供了一系列disql命令,用户可以使用这些命令让disql工具处理(不一定是数据库服务器)。 SQL 语句在 DIsql 中执行完后都被保存在一个特定的内存区域中,用户可以通过上下键查找到这些保存在内存中的 SQL 语句。DIsql 命令执行完后不保存在内存区域中。
disql工具存放在安装目录/bin/中,用户可以直接在程序菜单中启动SQL交互式查询工具,也可以使用命令行打开,后者适用于各操作系统,启动后,需要登录到数据库服务器,可以在打开disql工具同时登录,也可以打开后用login/connect登录,由于其他博主已有比较详细的介绍,同时不是本文重点,在此不作赘述。
set命令用于设置环境变量,show用于查看当前环境变量。语法如下:
SET <变量名> <值>{ <变量名> <值>}
SHOW <命令>
disql中所有的环境变量如下(以变量名:<属性值列出>):
SQL> set autocommit on
SQL>select $a from country;
输入 a的值:*
ECHO:
SQL> set echo on
SQL> start /home/cjt/check.sql
SQl>set feed 2
SQL>selet * from country;
SQL> set hea on
SQL> select * from country;
SQL> set hea off
SQL> select * from country;
SQL> set long 20
SQL> create table txt(c1 text);
SQL> insert into txt values('SQL is the most widely used database language.Whether you are an application developer,web application designer,or Microsoft user,a good working knowledge of SQL is an important part of interacting of databases.');
SQL> select * from txt;
SQL> set serverout on size 20000 format word_wrapped
SQL> set linesize 20
SQL> begin
2 dbms_output.put_line('SQL is the most widely used database language.Whether you are an application developer,web application designer,or Microsoft user,a good working knowledge of SQL is an important part of interacting of databases.');
3 dbms_output.put_line('DM database is so good');
4 end;
5 /
SQL> set serverout on size 20000 format TRUNCATED
再执行语句块: DIsql 在连接成功数据库时会自动运行两个配置文件 glogin.sql 和 login.sql。
glogin.sql 文件中的设置永久生效,该配置文件需要用户自行创建在安装目录下的/bin/disql_conf 路径下,需要用户在操作系统配置 DM_HOME 环境变量,disql_conf 目录需要用户自行创建。
login.sql 文件为用户自定义配置文件,对其存放路径不做限制。
glogin.sql 文件和 login.sql 文件的执行顺序如下:
1. 默认在$DM_HOME/bin/disql_conf 路径下查找 glogin.sql 文件并执行;
2. 默认在当前工作目录下(不是 DIsql 工具所在的目录)查找 login.sql 文件并执行,若未找到则执行步骤 3;
3. 判断操作系统是否配置了 DM_SQLPATH 环境变量,如果配置了该变量则在对应路径 下查找 login.sql 文件并执行。
DIsql 执行上述配置文件时并不会在 DIsql 窗口打印信息,如果没有找到上述配置文件则忽略。
HELP命令是一个常见于各种工具中的命令,顾名思义,用来查看当前工具下其他各种工具的用法,包括命令的标题、文本描述、所需参数、简写等。
HELP语法:HELP [命令名或命令名首字母],后者查询某一字母开头的所有命令的用法。
SPOOL命令用于将查询结果输出到指定文件。
语法:SPOOL {
CRE[ATE]:创建指定的文件,若指定的文件已存在,则报错,默认方式
REP[LACE]:创建指定的文件,若指定的文件已存在,则替换它
APP[END]]:将输出内容追加到指定文件的末尾
NO_PRINT:控制台不打印查询结果
OFF:关闭 SPOOL 输出
注:只有 SPOOL OFF 之后,才能在输出文件中看到完整的输出内容。
HOST命令用于在不退出disql的条件下执行系统命令。
语法:HOST [命令语句]
其中,命令语句可以缺省,缺省时表示切换到系统命令,切换后即可使用操作系统命令,使用EXIT即可再次回到disql界面。
DESCRIBE命令用于获取表或视图、存储过程、函数、包、记录、类的结构描述。
语法:DESCRIBE [<模式名>.][对象名]
不同对象所获取内容不同:
表/视图:列名、列数据类型、列是否可以取空值
函数/过程/类:1)存储函数/过程名,类型(函数或过程),函数返回值类型;
2)参数名,参数数据类型、参数输入输出属性、参数缺省值。
包:1)包内存储函数/过程名,类型(函数或过程),函数 返回值类型;
2)包内参数名,参数数据类型、参数输入输出属性、参数缺省值。
记录:参数名,参数数据类型,参数是否可以取空值。
DEFINE与COLUMN命令都可用于定义本地变量。
DEFINE用来定义一个本地变量的替代变量,然后对该变量赋一个 CHAR 类型的值;或者输出变 量的值和类型;
COLUMN用于定义一个本地列或表达式。
DEFINE语法及解释:
DEF[INE] [|< VARIABLE >]
DEF[INE] VARIABLE = text:申明一个变量,如果该变量存在,则重新赋值,否则新生成一个变量
并进行赋值。
DEF[INE] VARIABLE:如果该变量存在,则输出特定 VARIABLE 的值和类型,否则报错。
DEF[INE]:输出 DIsql 中所有的变量的值和类型。
注:命令定义的替代变量在当前的 DIsql 环境和/NOLOG 环境中均可以起作用。
当使用该命令定义变量时,如果变量值包含空格或区分大小写,则用引号引注。
使用“DEFINE 变量名”可以检查变量是否已经定义。
DEFINE 定义的变量会保存在环境 DIsql 环境中,可以在 SQL 语句中使用。默认的变量前缀是&。
COLUMN语法:
COL[UMN] [ [
EXPLAIN命令用于查看查询语句执行计划,与上文中AUTOTRACE设置为TRACE的情况不同,EXPLAIN命令只生成执行计划,并不实际执行SQL语句,因此产生的执行计划有可能不准。而后者获得的执行计划,是服务器实际执行的计划。
语法:
EXPLAIN
WHENEVER 命令用于设置异常处理方式,继续执行或退出dIsql。
语法:
WHENEVER SQLERROR
CONTINUE [ COMMIT | ROLLBACK | NONE ] |
EXIT [ SUCCESS | FAILURE | WARNING | n | | : ]
[ COMMIT | ROLLBACK ]
MORE命令用于当结果集过多,屏幕只能显示一个时,用户可以使用命令切换到下一个结果集。
LIST用于显示最近执行的 SQL 语句或者 PL/SQL 块信息(不显示 DIsql 命令)。
语法
L[IST] [n | n m | n * | n LAST | * | * n | * LAST | LAST]
n ,m :数值 SQL 行号。
*: 当前行号。
LAST: 最后一行。
CLEAR用于清理本地缓存。
CL[EAR]
当插入语句中包含大对象数据文件时,在插入语句前使用@。如:
@insert into T1 values('.jpg',@'D:\picture\pic1.jpg')
EDIT用以编辑指定的脚本文件。
用户不必在每次使用数据库的时候都编写常用的 SQL 语句和 PL/SQL 程序块,而是可以将它们保存到称为脚本的文件中。这些脚本专门为反复执行的各种任务而设计。
使用EDIT编辑脚本文件的语法:
ED[IT][] #若指定的文件不存在,则创建该脚本文件
#如果省略文件,则只会修改缓冲区中的最后一条 SQL 语句。DIsql 自动打开系统缺省的文本编辑器(WINDOWS 下使用 notepad),复制缓冲区中最后一条SQL 语句到文本中,这时用户可以对其中的内容进行编辑。修改完成之前,DIsql 一直处于等待状态。修改完毕,保存文件后,被修改的内容就会被写入缓存区。这对于修改错误命令很方便。
使用PROMPT <输出内容>命令会在屏幕上输出一行信息,以便在存储脚本中向用户传送信息。如:
PROMPT 部分查询结果如下:
select * from student where age>15;
关于更多DM数据库信息请咨询DM社区文档: https://eco.dameng.com