DM工具:disql初学

概述

        最近在学习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用于查看当前环境变量。语法如下:

        SET <变量名> <值>{ <变量名> <值>}
        SHOW <命令>

环境变量

        disql中所有的环境变量如下(以变量名:<属性值列出>):

  1. AUTO[COMMIT]:<ON|OFF(默认)>,所有执行的 SQL 语句的事务是否自动提交,如果是否,则需要用户显式提交。
    SQL> set autocommit on
    
  2. DEFINE:<前缀符号|ON(默认,前缀符号为&)|OFF>,表示是否使用 DEFINE 定义本地变量,如果是,直接给出前缀符号,默认ON,此时前缀符号为&。
    SQL>select $a from country;
    输入 a的值:*
    

  3. ECHO:<ON(默认)|OFF>,在用 START 命令执行一个 SQL 脚本时,是否显示脚本中正在执行的 SQL 语句。

    SQL> set echo on
    SQL> start /home/cjt/check.sql

     

  4. FEED[BACK] :<n|ON(默认,值为6)|OFF>,表示是否显示当前 SQL 语句查询或修改的总行数。开启时,当值大于n时,才显示结果的总行数。
    SQl>set feed 2
    SQL>selet * from country;
    

  5. HEA[DING]:<ON(默认)|OFF>,表示是否显示列标题,当为OFF时,以空白行代替
    SQL> set hea on
    SQL> select * from country;
    SQL> set hea off
    SQL> select * from country;
  6. LINESHOW:<ON(默认)|OFF>,表示是否显示行号,类似HEA,不再演示结果。
  7. NEWP[AGE]:<n(默认为1)|NONE>,设置页间隔为n个空行。演示结果与PAGES一同展示。
  8. PAGES[IZE]:<n,默认14>,设置一页有多少行,默认14。n=0时,所有的输出内容为一页并且不显示列标题。当 ISQL_MODE = 1 时,如果 PAGESIZE < NEWPAGE + 2,则不显示列标题。
  9. TIMING:<ON(默认)|OFF>,表示是否显示每个SQL语句执行的花费时间。
  10. TIME:<ON(默认)|OFF>,表示是否显示系统时间
  11. VER[IFY]:<ON(默认)|OFF>,是否列出环境变量被替换前、后的控制命令文本。默认值为 ON。参考DEFINE演示示例中“原值”与“新值”部分,当为OFF时则不显示。
  12. LONG:<n,默认800>,用于设置 BLOB、CLOB、CHAR、VARCHAR、BINARY、VARBINARY、CLASS 等类型一列能显示的最大字节数,超过规定长度的部分将被截断。
    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;
    
  13. LINESIZE :<n,默认screen_length,即屏幕宽度>,用于设置屏幕中一行的显示宽度。
  14. SERVEROUT[PUT]:<ON|OFF(默认)>    [SIZE <n,默认20000>]   [FOR[MAT]<WRA[PPED] | WOR[D_WRAPPED](默认值) | TRU[NCATED]>],用于当块中有打印信息时,是否打印,以及打印的格式。设置之后,可以使用 DBMS_OUTPUT 包打印(认为 DBMS_OUTPUT 包已经创建)。
    其中,SIZE 表示打印长度,默认20000;WORD_WRAPPED表示按照单词分隔;TRUNCATED表示单词被截断;FORMAT:按照服务器返回的显示,不做格式化。

    首先,我们设置打印信息为ON,将打印长度设置为20000(默认就是20000,仅仅便于理解),然后将单词分隔(为了体现分隔,将LINESIZE设置短一点)
    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
    
    
    再执行语句块:
  15. CHAR_CODE:<GBK | UTF8 | DEFAULT(默认值,为操作系统的编码方式)>,用于设置 SQL 语句的编码方式。
  16. SCREENBUFSIZE:<DEFAULT(20M) | n>,用于设置屏幕缓冲区的长度。用来存储屏幕上显示的内容。单位为字节,范围为1~50m。
  17. CURSOR:<STATIC|FORWARDONLY(默认)|DEFAULT,即设置为默认>,用于设置 DPI 语句句柄中游标的类型。
  18. AUTOTRACE:<OFF(默认) | NL | INDEX | ON|TRACE>,用于设置执行计划和统计信息的跟踪。
    OFF:默认,不开启AUTOTRACE,正常执行语句。
    NL(nest loop):开启AUTOTRACE,不执行语句,如果执行计划中有嵌套循环,则打印 NL 操作符的内容。
    ON/INDEX:开启AUTOTRACE,不执行语句。如果有表扫描,则打印执行计划中表扫描的方式、表名和索引。
    TRACE:查询化中常用,正常执行语句,同时开启AUTOTRACE,打印执行计划。
  19. DESCRIBE:[DEPTH<1(默认)|n|ALL>] [LINE[NUM]<ON|OFF(默认)>]
    [INDENT<ON(默认)|OFF>] ,用于设置DESCRIBE 对象结构信息的显示方式。
    DEPTH:结构信息显示的层数,默认为1
    LINENUM:是否显示对象行号,成员显示父亲的行号
    INDENT:当对象的类型是复合类型时,是否通过缩进的方式显示成员信息。
  20. TRIMS[POOL]: <ON|OFF(默认)>,对于 SPOOL 文件,是否去除输出每行的结尾空格,缺省为 OFF。
  21. LOBCOMPLETE:<ON|OFF(默认)>,是否从服务器中全部取出大字段数据。对于大字段数据,是否从服务器全部取出,防止死锁的发生;与显示长度不同,即便是全部取出,也可以只显示一部分。
  22. COLSEP:[TEXT],用TEXT设置为列分隔符,如果TEXT包含空格或标点符号,请用单引号扩起来。默认为一个空格。
  23. KEEPDATA[ON|OFF(默认)],是否为数据对齐进行优化,为ON时,DIsql 对服务器传回的字符串数据,将其中的换行符、TAB 都转换为空格,OFF时保持数据的原始格式。
  24. AUTORECONN:<ON|OFF>,字面意思,设置是否自动重连。
  25. NEST_COMMENT:<ON |OFF(默认)>,设置是否支持多层注释嵌套。disql中注释必须由起始符号“/*”开始,由结 束符号“*/”结束。注释内容还可以嵌套其他的注释,嵌套的注释也同样需由“/*”开始 和“*/”结束。
  26. NULL_ASNULL:<ON |OFF(默认)>,在绑定参数输入时,是否将输入的 NULL 当做数据库的 null 处理。 缺省为 OFF。
  27. CMD_EXEC:<ON(默认)|OFF>,是否执行 sql 脚本文件中“/”命令。
  28. CHARDEL:[text]设置字符串的限定符。
  29. FLOAT_SHOW:<float_lengh,默认0>,用于设置 FLOAT、DOUBLE 类型数据按科学计数法显示的分界长度,超过长度时用科学计数法显示。
  30. CONSOLE_PRINT:<ON(默认)|OFF>,是否打印查询结果。
  31. SQLCODE:<ON|OFF(默认)>,决定控制台是否打印 SQLCODE 返回值。
    返回1时表示当前SQL语句执行成功,返回0表示反之。
  32. SQL_LINESHOW:<ON(默认)|OFF>,输入多行 SQL 语句时,是否打印 SQL 语句的行号。
  33. NULL_SHOW:<ON(默认)|OFF >,空数据是否显示为 NULL。
  34. SQLPROMPT:<text>,设置 dIsql 命令行的前缀标识。其中可以包含 DEFINE 变量名。默认则 SQL>为前 缀。其中 _USER 和_connect_identifier 两个系统变量代表“系统用户名”和 “IP 地址:端口号”。
  35. ISQL_MODE:<1|0(默认)>,是否兼容 Oracle 结果集打印方式。
  36. WRAP:<ON(默认值)|OFF>,是否折行打印结果集。只在ISQL_MODE为1时,该参数才有效。
  37. CTRL_INFO:<0(默认)|1|2|3>,设置 DIsql 的回显打印信息。
    0表示无特殊设置。
    1表示控制-E 不强制关闭行号、执行时间以及执行号等信息的展示。
    2表示控制 DIsql 的回显信息按 5 列打印。具体效果:
        第 1 列:语句的 SQL 类型,如:DELETE、UPDATE、SELECT 等
        第 2 列:语句的执行结果,执行成功则为 0,执行失败则为错误码。
        第 3 列:语句影响行数,DDL 和 PLsql 类型语句的影响行数均默认为 0,仅 DELETE、   UPDATE、SELECT 类型语句存在具体的影响行数。
        第 4 列:语句的执行时间。
        第 5 列:语句执行失败时的错误信息,若语句执行成功,则不打印该列。
    3表示同时进行1与2的设置。
  38. RETRY_CONN<0(默认)|n>,设置自动重连的次数。该环境变量主要用于写自动化脚本,当连接失 败导致 SQL 语句执行失败时,DIsql 尝试自动重新连接数据库,如果在设置次数内连 接成功,则重新执行相应 SQL 语句。
    需要注意的是,该环境变量与 AUTORECONN 并无关系。

 使用配置文件设置环境变量

        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语法:HELP [命令名或命令名首字母],后者查询某一字母开头的所有命令的用法。

SPOOL

        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 输出
        注:只有 SPOOL OFF 之后,才能在输出文件中看到完整的输出内容。

HOST

        HOST命令用于在不退出disql的条件下执行系统命令。

        语法:HOST [命令语句]
        其中,命令语句可以缺省,缺省时表示切换到系统命令,切换后即可使用操作系统命令,使用EXIT即可再次回到disql界面。

DESCRIBE

        DESCRIBE命令用于获取表或视图、存储过程、函数、包、记录、类的结构描述。

        语法:DESCRIBE [<模式名>.][对象名]

        不同对象所获取内容不同:
        表/视图:列名、列数据类型、列是否可以取空值
        函数/过程/类:1)存储函数/过程名,类型(函数或过程),函数返回值类型;
                                2)参数名,参数数据类型、参数输入输出属性、参数缺省值。
        包:1)包内存储函数/过程名,类型(函数或过程),函数 返回值类型;
               2)包内参数名,参数数据类型、参数输入输出属性、参数缺省值。
        记录:参数名,参数数据类型,参数是否可以取空值。

DEFINE/COLUMN

        DEFINE与COLUMN命令都可用于定义本地变量。

        DEFINE用来定义一个本地变量的替代变量,然后对该变量赋一个 CHAR 类型的值;或者输出变 量的值和类型;
        COLUMN用于定义一个本地列或表达式。

        DEFINE语法及解释:

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 时,该参数有效。定长类型的列的打印长度不受该参数影响。

EXPLAIN

        EXPLAIN命令用于查看查询语句执行计划,与上文中AUTOTRACE设置为TRACE的情况不同,EXPLAIN命令只生成执行计划,并不实际执行SQL语句,因此产生的执行计划有可能不准。而后者获得的执行计划,是服务器实际执行的计划。

        语法:

EXPLAIN <SQL语句>

WHENEVER

        WHENEVER 命令用于设置异常处理方式,继续执行或退出dIsql。

        语法:

WHENEVER SQLERROR
CONTINUE [ COMMIT | ROLLBACK | NONE ] |
EXIT [ SUCCESS | FAILURE | WARNING | n | <variable> | : <bindvariable> ] 
[ COMMIT | ROLLBACK ]

MORE

        MORE命令用于当结果集过多,屏幕只能显示一个时,用户可以使用命令切换到下一个结果集。

LIST

        LIST用于显示最近执行的 SQL 语句或者 PL/SQL 块信息(不显示 DIsql 命令)。

        语法

L[IST] [n | n m | n * | n LAST | * | * n | * LAST | LAST]
n ,m :数值 SQL 行号。
*: 当前行号。
LAST: 最后一行。

CLEAR

        CLEAR用于清理本地缓存。

CL[EAR] <option>
<option> ::= [COL[UMNS] | SQL | SCR[EEN] | BUFF[ER]]
COL[UMNS]:清理所有的 COLUMN 变量信息。
SQL:清理本地 SQL 缓存信息。
SCR[EEN]:清理 DIsql 终端屏幕信息。
BUFF[ER]:同 SQL 功能一样,清理本地 SQL 缓存信息。

插入大字段

        当插入语句中包含大对象数据文件时,在插入语句前使用@。如:

@insert into T1 values('.jpg',@'D:\picture\pic1.jpg')

EDIT 

        EDIT用以编辑指定的脚本文件。

        用户不必在每次使用数据库的时候都编写常用的 SQL 语句和 PL/SQL 程序块,而是可以将它们保存到称为脚本的文件中。这些脚本专门为反复执行的各种任务而设计。

        使用EDIT编辑脚本文件的语法:

ED[IT][<file_name>] #若指定的文件不存在,则创建该脚本文件
#如果省略文件<file_name>,则只会修改缓冲区中的最后一条 SQL 语句。DIsql 自动打开系统缺省的文本编辑器(WINDOWS 下使用 notepad),复制缓冲区中最后一条SQL 语句到文本中,这时用户可以对其中的内容进行编辑。修改完成之前,DIsql 一直处于等待状态。修改完毕,保存文件后,被修改的内容就会被写入缓存区。这对于修改错误命令很方便。

PROMPT

        使用PROMPT <输出内容>命令会在屏幕上输出一行信息,以便在存储脚本中向用户传送信息。如:

PROMPT 部分查询结果如下:
select * from student where age>15;

 关于更多DM数据库信息请咨询DM社区文档: https://eco.dameng.com

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于长文本的修改,DisQLDistributed SQL)是一种分布式数据库查询语言,可以用于对数据库中的数据进行修改操作。它支持在分布式环境下进行高效的数据修改,并具有良好的扩展性和容错性。 使用DisQL进行长文本的修改需要按照以下步骤进行操作: 1. 连接到分布式数据库:首先,你需要建立与分布式数据库的连接。可以使用DisQL提供的连接接口,输入数据库的地址、用户名和密码等信息,建立与数据库的连接通道。 2. 编写修改语句:根据你的需求,编写相应的DisQL修改语句。在DisQL中,可以使用UPDATE语句来修改表中的数据。例如,可以使用UPDATE语句更新表中的某一列数据或多列数据。 3. 执行修改操作:将编写好的DisQL修改语句传递给分布式数据库,并执行修改操作。数据库会根据语句中的条件对相应的数据进行修改。 4. 检查修改结果:执行完修改操作后,可以通过查询语句来检查所做的修改是否生效。可以使用SELECT语句查询相应的数据行,验证修改结果是否符合预期。 需要注意的是,长文本的修改可能涉及到较大的数据量和复杂的操作,因此在进行修改之前,建议先备份相关数据,并确保有足够的系统资源和性能来处理这些操作。此外,具体的DisQL语法和操作方法可能会因不同的分布式数据库而有所差异,你需要参考相应的文档和手册进行操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值