<达梦> 《达梦数据库之disql 常用命令》 您所在的位置:网站首页 describe命令查看数据文件 <达梦> 《达梦数据库之disql 常用命令》

<达梦> 《达梦数据库之disql 常用命令》

2023-06-03 04:27| 来源: 网络整理| 查看: 265

DIsql 常用命令 1 帮助 HELP2 输出文件 SPOOL3 切换到操作系统命令 HOST4 获取对象结构信息 DESCRIBE5 管理本地变量 DEFINE, COLUMN 和 UNDEFINE5.1 DEFINE5.2 COLUMN5.3 UNDEFINE 6 查看执行计划 EXPLAIN7 设置异常处理方式 WHENEVER8 查看下一个结果集 MORE9 显示 SQL 语句或块信息 LIST10 插入大对象数据11 缓存清理 CLEAR

1 帮助 HELP

DIsql 帮助命令,可以帮助用户查看其他命令的具体用法。用户可以看到其他命令系统显示的内容,概括为:

命令的标题 命令的文本描述 命令的简写(例如,AUTO 可以代替 AUTOCOMMIT) 可以向命令传递的强制参数和可选参数 help 显示指定命令的帮助信息。

语法如下:

HELP|? [topic] topic:命令名称或者命令名称的首字母,查询某一命令用法或者某一字母开头的所有命令用法。 示例如下: SQL> HELP DEFINE DEFINE ------

设置变量值,或者显示已定义的变量信息。

DEF[INE] [variable] | [variable = text] 2 输出文件 SPOOL

将查询结果输出到指定文件。

语法如下:

SPOOL { | OFF } ::= [CRE[ATE]|REP[LACE]|APP[END]][NO_PRINT] :指定文件的绝对路径 CRE[ATE]:创建指定的文件,若指定的文件已存在,则报错,默认方式 REP[LACE]:创建指定的文件,若指定的文件已存在,则替换它 APP[END]]:将输出内容追加到指定文件的末尾 NO_PRINT:控制台不打印查询结果 OFF:关闭 SPOOL 输出

注意 只有SPOOL OFF之后,才能在输出文件中看到输出的内容。

示例如下:

环境变量 CONSOLE_PRINT 缺省为 ON,具体请参见 3.3.30 CONSOLE_PRINT。

SQL> spool d:\b.sql SQL> select 1; 行号 1 ---------- ----------- 1 1 已用时间: 0.400(毫秒). 执行号:325. SQL> spool off 执行上述语句,控制台打印查询结果,并将查询结果输出到指定文件 d:\b.sql 中。 指定 NO_PRINT。 SQL> spool d:\b.sql no_print SQL> select 2; SQL> spool off 执行上述语句,控制台不打印查询结果,只将查询结果输出到指定文件 d:\b.sql 中。 3 切换到操作系统命令 HOST

使用 HOST 命令可以不用退出 DIsql 就能执行操作系统命令。如果单独执行 host,则能够直接从 DIsql 界面切换到操作系统,之后可使用 EXIT 回到 DIsql 界面。

语法如下:

HOST[] :操作系统命令。

示例如下:

SQL>HOST DIR 4 获取对象结构信息 DESCRIBE

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

语法如下:

DESC[RIBE] [.]

各对象获取的内容略有不同:

表或视图获取的内容包括列名,列数据类型,列是否可以取空值。 函数、过程、类获取的内容包括两类:1)存储函数/过程名,类型(函数或过程),函数返回值类型;2)参数名,参数数据类型、参数输入输出属性、参数缺省值。 包获取的内容分为两类:1)包内存储函数/过程名,类型(函数或过程),函数返回值类型;2)包内参数名,参数数据类型、参数输入输出属性、参数缺省值。 记录获取的内容为:参数名,参数数据类型,参数是否可以取空值。 举例说明:

例 1 获取表 sysgrants 的结构描述。

SQL> desc sysgrants; 执行结果如下: 行号 NAME TYPEV NULLABLE ---------- --------- ------- -------- 1 URID INTEGER N 2 OBJID INTEGER N 3 COLID INTEGER N 4 PRIVID INTEGER N 5 GRANTOR INTEGER N 6 GRANTABLE CHAR(1) N 6 rows got 已用时间: 2.408(毫秒). 执行号:753.

例 2 获取存储过程的结构描述。

创建一个存储过程: CREATE OR REPLACE PROCEDURE PROC_1(A IN OUT INT) AS B INT; BEGIN A:=A+B; EXCEPTION WHEN OTHERS THEN NULL; END; / 获取存储过程 PROC_1 的结构描述: SQL>describe PROC_1; 执行结果如下: 行号 NAME TYPEV IO DEF RT_TYPE ---------- ------ ------- ----- --- ------- 1 PROC_1 PROC 2 A INTEGER INOUT 已用时间: 22.679(毫秒). 执行号:757.

例 3 获取包的结构描述

创建数据库表: CREATE TABLE Person(Id INT IDENTITY, Name VARCHAR(100), City VARCHAR(100)); INSERT INTO Person(Name, City) VALUES('Tom','武汉'); INSERT INTO Person(Name, City) VALUES('Jack','北京'); INSERT INTO Person(Name, City) VALUES('Mary','上海'); 创建包: CREATE OR REPLACE PACKAGE PersonPackage AS E_NoPerson EXCEPTION; PersonCount INT; Pcur CURSOR; PROCEDURE AddPerson(Pname VARCHAR(100), Pcity varchar(100)); PROCEDURE RemovePerson(Pname VARCHAR(100), Pcity varchar(100)); PROCEDURE RemovePerson(Pid INT); FUNCTION GetPersonCount RETURN INT; PROCEDURE PersonList; END PersonPackage; / 创建包主体: CREATE OR REPLACE PACKAGE BODY PersonPackage AS PROCEDURE AddPerson(Pname VARCHAR(100), Pcity varchar(100) )AS BEGIN INSERT INTO Person(Name, City) VALUES(Pname, Pcity); PersonCount = PersonCount + SQL%ROWCOUNT; END AddPerson; PROCEDURE RemovePerson(Pname VARCHAR(100), Pcity varchar(100)) AS BEGIN DELETE FROM Person WHERE NAME LIKE Pname AND City like Pcity; PersonCount = PersonCount - SQL%ROWCOUNT; END RemovePerson; PROCEDURE RemovePerson(Pid INT) AS BEGIN DELETE FROM Person WHERE Id = Pid; PersonCount = PersonCount - SQL%ROWCOUNT; END RemovePerson; FUNCTION GetPersonCount RETURN INT AS BEGIN RETURN PersonCount; END GetPersonCount; PROCEDURE PersonList AS DECLARE V_id INT; V_name VARCHAR(100); V_city VARCHAR(100); BEGIN IF PersonCount = 0 THEN RAISE E_NoPerson; END IF; OPEN Pcur FOR SELECT Id, Name, City FROM Person; LOOP FETCH Pcur INTO V_id,V_name,V_city; EXIT WHEN Pcur%NOTFOUND; PRINT ('No.' + (cast (V_id as varchar(100))) + ' ' + V_name + '来自' + V_city ); END LOOP; CLOSE Pcur; END PersonList; BEGIN SELECT COUNT(*) INTO PersonCount FROM Person; END PersonPackage; /

获取包 PersonPackage 的结构描述:

SQL>describe PersonPackage; 执行结果如下: 行号 NAME TYPEV IO DEF RT_TYPE ---------- -------------- ------------ -- --- ------- 1 ADDPERSON PROC 2 PNAME VARCHAR(100) IN 3 PCITY VARCHAR(100) IN 4 REMOVEPERSON PROC 5 PNAME VARCHAR(100) IN 6 PCITY VARCHAR(100) IN 7 REMOVEPERSON PROC 8 PID INTEGER IN 9 GETPERSONCOUNT FUNC INTEGER 10 PERSONLIST PROC 10 rows got 已用时间: 23.196(毫秒). 执行号:764.

例 4 使用 DEPTH 显示列的结构信息

CREATE TYPE ADDRESS AS OBJECT ( STREET VARCHAR2(20), CITY VARCHAR2(20) ); / CREATE TYPE ADDRESS1 AS OBJECT ( NO INT, SADDR ADDRESS ); / 创建表 EMPINFO: CREATE TABLE EMPINFO (LAST_NAME VARCHAR2(30), EMPADDR ADDRESS, SMADDR ADDRESS1, JOB_ID VARCHAR2(20), SALARY NUMBER(7,2) );

设置 DESCRIBE 的显示方式 :

SQL>SET DESCRIBE DEPTH 1 LINENUM ON INDENT ON;

获取表 EMPINFO 的结构描述如下:

SQL>DESC EMPINFO; 行号 ID PID NAME TYPEV NULLABLE ---------- -- --- --------- ----------- -------- 1 1 LAST_NAME VARCHAR(30) Y 2 2 EMPADDR ADDRESS Y 3 3 2 STREET VARCHAR(20) 4 4 2 CITY VARCHAR(20) 5 5 SMADDR ADDRESS1 Y 6 6 5 NO INTEGER 7 7 5 SADDR ADDRESS 8 8 JOB_ID VARCHAR(20) Y 9 9 SALARY DEC(7, 2) Y 9 rows got 已用时间: 18.325(毫秒). 执行号:768.

设置 DEPTH 为 1 时,表 EMPINFO 的结构信息只显示至第一层。LINENUM 为 ON 时,显示行号 ID、PID 信息;反之,行号 ID、PID 信息不显示;INDENT 为 ON 时,NAME 的显示方式发生了缩进;反之,不发生缩进。

重新设置 DESCRIBE 的显示方式,并获取表 EMPINFO 的结构描述如下:

SQL>SET DESCRIBE DEPTH 2 LINENUM ON INDENT ON; SQL>DESC EMPINFO;

执行结果如下:

查看 DEPTH 为 2 时显示结果

图4.1 查看DEPTH为2时显示结果 由上图可见,与 DEPTH 为 1 时对比,表 EMPINFO 的结构描述增加了属于第二层的两列信息:STREET 和 CITY。

5 管理本地变量 DEFINE, COLUMN 和 UNDEFINE

定义本地变量的命令有 DEFINE 和 COLUMN。

删除本地变量的命令是 UNDEFINE。

5.1 DEFINE

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

语法如下:

DEF[INE] [|] DEF[INE] VARIABLE = text:申明一个变量,如果该变量存在,则重新赋值,否则新生成一个变量,并进行赋值。 DEF[INE] VARIABLE:如果该变量存在,则输出特定 VARIABLE 的值和类型,否则报错。 DEF[INE]:输出 DIsql 中所有的变量的值和类型。 该命令定义的替代变量在当前的 DIsql 环境和/NOLOG 环境中均可以起作用。 当使用该命令定义变量时,如果变量值包含空格或区分大小写,则用引号引注。另外,使用“DEFINE 变量名”可以检查变量是否已经定义。 DEFINE 定义的变量会保存在环境 DIsql 环境中,可以在 SQL 语句中使用。默认的变量前缀是&。

示例如下:

SQL>DEF VAR=666; SQL>select * from sysobjects where id=&VAR; 如果 var 没有定义,会提示输入变量的值;没有定义的 var 不会保存在 DIsql 环境中。 关闭变量替换: SET define off

例 1 Define 变量与其他字符之间的连接字符是点号’.’。示例如下:

SQL>SET DEFINE ON SQL>DEF VAR1 = C; SQL>DEF VAR2 = TEST1; SQL>DROP TABLE TEST1; SQL>CREATE TABLE TEST1(C1 INT); SQL>INSERT INTO TEST1 VALUES(1); SQL>COMMIT; SQL>SELECT &VAR1.1 FROM TEST1;

执行结果如下:

行号 C1 ---------- ----------- 1 1 已用时间: 0.428(毫秒). 执行号:702. SQL> select &var2..c1 from test1; 执行结果如下: 原值 1:select &var2..c1 from test1; 新值 1:select TEST1.c1 from test1; 行号 C1 ---------- ----------- 1 1 已用时间: 0.355(毫秒). 执行号:703.

例 2 DEFINE 变量定义为整型。

SQL>SET DEFINE ON //打开DEFINE变量定义 SQL>DEFINE C1=1 //定义变量C1为1 SQL>SELECT &C1 FROM DUAL; 执行结果如下: 原值 1:SELECT &C1 FROM DUAL; 新值 1:SELECT 1 FROM DUAL; 行号 1 ---------- ----------- 1 1 已用时间: 0.477(毫秒). 执行号:704.

//在存储函数中的使用

SQL>CREATE OR REPLACE FUNCTION F1(C1 INT)RETURN INT IS BEGIN C1=&C1; RETURN(C1); END; / SQL> SELECT F1(0);

执行结果如下:

行号 F1(0) ---------- ----------- 1 1 已用时间: 0.355(毫秒). 执行号:707. SQL>DEFINE C2=(2+3*4) //定义变量C2为表达式,定义为表达式时必须加括号 SQL> SELECT &C2*4 FROM DUAL; 执行结果如下: 原值 1:SELECT &C2*4 FROM DUAL; 新值 1:SELECT (2+3*4)*4 FROM DUAL; 行号 (2+(3*4))*4 ---------- ----------- 1 56 已用时间: 0.490(毫秒). 执行号:708.

例 3 DEFINE 变量定义为字符型。

SQL>SET DEFINE ON //打开DEFINE变量定义 SQL>DEFINE C3="'OG'" //定义变量C3为'OG' 一种使用 DEFINE 字符串变量的方式 SQL> SELECT &C3 FROM DUAL;

执行结果如下:

原值 1:SELECT &C3 FROM DUAL; 新值 1:SELECT 'OG' FROM DUAL; 行号 'OG' ---------- ---- 1 OG 已用时间: 0.470(毫秒). 执行号:709. SQL>SELECT LCASE(&C3) FROM DUAL;//引用变量为函数参数 执行结果如下: 原值 1:SELECT LCASE(&C3) FROM DUAL; 新值 1:SELECT LCASE('OG') FROM DUAL; 行号 LCASE('OG') ---------- ----------- 1 og 已用时间: 14.052(毫秒). 执行号:59. SQL>SET DEFINE ON //打开DEFINE变量定义 SQL>DEFINE C4=OG //定义变量C4为OG 另外一种使用 DEFINE 字符串变量的方式 SQL>SELECT '&C4' FROM DUAL; 执行结果如下: 原值 1:SELECT '&C4' FROM DUAL; 新值 1:SELECT 'OG' FROM DUAL; 行号 'OG' ---------- ---- 1 OG 已用时间: 0.173(毫秒). 执行号:711. SQL>CREATE OR REPLACE FUNCTION F1(&C4 INT)RETURN INT IS BEGIN &C4=777; RETURN(&C4); END; / SQL> SELECT F1(0); 执行结果如下: 行号 F1(0) ---------- ----------- 1 777 // 返回值OG=777 已用时间: 0.460(毫秒). 执行号:713. 例 4 DEFINE 变量定义为日期类型。 SQL>SET DEFINE ON //打开DEFINE变量定义 SQL>DEFINE C5="DATE'2015-10-01'" SQL>SELECT &C5+1 FROM DUAL; //引用变量值加1天

执行结果如下:

原值 1:SELECT &C5+1 FROM DUAL; 新值 1:SELECT DATE'2015-10-01'+1 FROM DUAL; 行号 DATE'2015-10-01'+1 ---------- ------------------ 1 2015-10-02 已用时间: 28.478(毫秒). 执行号:714. SQL>SELECT &C5+INTERVAL '01-02' YEAR TO MONTH FROM DUAL; //引用变量值与日期类型作运算

执行结果如下:

原值 1:SELECT &C5+INTERVAL '01-02' YEAR TO MONTH FROM DUAL; 新值 1:SELECT DATE'2015-10-01'+INTERVAL '01-02' YEAR TO MONTH FROM DUAL; 行号 DATE'2015-10-01'+INTERVAL+'01-02'YEARTOMONTH ---------- -------------------------------------------- 1 2016-12-01 已用时间: 0.482(毫秒). 执行号:715. 5.2 COLUMN

定义一个本地列或表达式。

语法如下:

COL[UMN] [ []] ::= NEW_VALUE variable | FOR[MAT] ::= 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 为 ON 时,该参数有效。定长类型的列的打印长度不受该参数影响。

示例如下:

准备数据如下:

SQL> DROP TABLE TEST; SQL> CREATE TABLE TEST(C1 VARCHAR(50)); SQL> INSERT INTO TEST VALUES('DAMENGSHUJUKU'); SQL> INSERT INTO TEST VALUES('A'); SQL> INSERT INTO TEST VALUES('B'); SQL> COMMIT;

例 1 将列 C1 的值作为变量 DVAR,缺省 COLUMN C1 ON。

SQL> COLUMN C1 NEW_VALUE DVAR SQL> SELECT * FROM TEST;

执行结果如下:

行号 C1 ---------- ------------- 1 DAMENGSHUJUKU 2 A 3 B SQL> DEFINE DVAR DEFINE DVAR = "B" (CHAR) 例 2 设置 ISQL_MODE 为 1,C1 列的列打印长度为 8,缺省 WRAP 为 ON,表示折行打印结果集,缺省 COLUMN C1 ON。 SQL> SET ISQL_MODE 1 SQL> COLUMN C1 FORMAT A8 SQL> SELECT * FROM TEST;

执行结果如下:

行号 C1 ---------- -------- 1 DAMENGSH UJUKU 2 A 3 B 通过如下方式设置是否将变量 variable 或列打印长度 format 与 column|expr 相关联,缺省值为 ON,表示已关联。

语法如下:

COL[UMN]

示例如下:

SQL>COLUMN C1 OFF 5.3 UNDEFINE

删除一个或多个本地变量,此变量可以是 DEFINE 定义生成的本地变量,也可以是 COLUMN 关联的本地变量。

语法如下:

UNDEF[INE] ::={ }

示例如下:

SQL> UNDEF VAR1 C1 6 查看执行计划 EXPLAIN

用 EXPLAIN 命令来查看查询语句的执行计划。

语法如下:

EXPLAIN 请参考《DM8_SQL 语言使用手册》。

示例如下:

SQL>EXPLAIN select count(*) from sysobjects; 7 设置异常处理方式 WHENEVER

用 whenever 命令可以设置异常处理方式,继续执行或退出 DIsql。

语法如下:

WHENEVER SQLERROR CONTINUE [ COMMIT | ROLLBACK | NONE ] | EXIT [ SUCCESS | FAILURE | WARNING | n | | : ] [ COMMIT | ROLLBACK ] n 和的返回值受限于操作系统,在不同平台下,会有所不同,例如:UNIX 系统只用一个字节来存 code,所以返回值的范围只在 0~255 之间。

示例如下:

SQL>whenever sqlerror exit 1 SQL>select c1 from dual; select c1 from dual; 执行结果如下: 第1 行附近出现错误[-2111]:无效的列名[C1]. //windows系统下,输入echo %ERRORLEVEL%,查看返回值为:1 //linux系统下,输入echo $?,查看返回值为:1 8 查看下一个结果集 MORE

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

MORE | MR 例如,当执行如下语句时,用户想查看更多的结果集,可以使用 MORE 命令。

begin select top 10 * from v$dm_ini; select top 10 * from sysobjects; select * from dual; end / 9 显示 SQL 语句或块信息 LIST

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

语法如下:

L[IST] [n | n m | n * | n LAST | * | * n | * LAST | LAST] 或者; n ,m :数值 SQL 行号。 *: 当前行号。 LAST: 最后一行。 10 插入大对象数据 当插入语句中包含大对象数据文件时,使用 @。 @ ,请参考《DM8_SQL 语言使用手册》,其中大数据的插入值格式为: @'path'

示例如下:

例如,在 test 表中插入大对象 e:\DSC_1663.jpg。 create table test(a int,b image); @insert into test values(1,@'e:\DSC_1663.jpg'); 11 缓存清理 CLEAR

清理指定操作本地缓存。

语法如下:

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

示例如下:

SQL> COLUMN CVAR NEW_VALUE DVAR SQL> col COLUMN CVAR ON NEW_VALUE DVAR SQL> cl col columns 已清除 SQL> col SQL>


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有