注册
达梦数据复制软件DMDRS DRS语言使用:基本数据类型和基本语法
专栏/数+融合专栏/ 文章详情 /

达梦数据复制软件DMDRS DRS语言使用:基本数据类型和基本语法

达梦数+数据融合软件(DMDF)产品团队 2026/07/29 179 0 0
摘要 介绍DMDRS DRS语言的基本数据类型和基本语法。

1 基本数据类型

1.1 常规数据类型

1.1.1 精确数值类型

数据类型 说明
NUMBER[(p[,s])] 用于存储零、正负定点数。精度p是一个无符号整数,定义总的数字数,取值范围:1~38;标度s不应大于其精度。
TINYINT 用于存储有符号整数,精度为3,标度为0。取值范围:-128~127。
SMALLINT 用于存储有符号整数,精度为5,标度为0。取值范围:-32768(-215)~327672(215-1)。
INT 用于存储有符号整数,精度为10,标度为0。取值范围:-2147483648(-231)~2147483647(231-1)。
BIGINT 用于存储有符号整数,精度为19 ,标度为0。取值范围:-9223372036854775808(-263)~9223372036854775807(263-1)。

1.1.2 近似数值类型

数据类型 说明
DOUBLE 带二进制精度的浮点数,不支持指定精度,直接使用标准C语言中的DOUBLE,取值范围:-1.79*10308~1.79*10308

1.1.3 布尔类型

数据类型 说明
BOOL 用于存储布尔类型数据,取值范围:0或1。

1.1.4 变长数据类型

数据类型 说明
VARCHAR [(p)] 字符数据类型,精度p取值范围:1~20000。默认精度为8188。
VARBINARY [(p)] 二进制数据类型。精度p取值范围:1~20000。默认精度为8188。

1.1.5 日期时间数据类型

数据类型 说明
DATE DATE类型包括年、月、日信息,定义了'0001-01-01'和'9999-12-31'之间任何一个有效的格里高利日期。
TIME [(p)] TIME类型包括时、分、秒信息,定义了一个在'00:00:00.000000'和 '23:59:59.999999'之间的有效时间。TIME类型的小数秒精度p规定了秒字段中小数点后面的位数,取值范围:0~6,如果未定义,缺省精度为0。
TIMESTAMP[ (p)] TIMESTAMP类型包括年、月、日、时、分、秒信息,定义了一个在'0001-01-01 00:00:00.000000'和'9999-12-31 23:59:59.999999'之间的有效格里高利日期时间。TIMESTAMP类型的小数秒精度p规定了秒字段中小数点后面的位数,取值范围:0~6,如果未定义,缺省精度为6。

1.2 数组类型

数组的使用分为两步。

  1. 定义数组类型。

  2. 声明该类型的数组变量。

1.2.1 定义数组类型

数组分为静态数组和动态数组两类,其中动态数组需要动态分配空间后才能使用,具体见后文。

语法

--定义静态数组类型 TYPE <数组类型名> IS ARRAY <数据类型>[<数组长度>]; --定义动态数组类型 TYPE <数组类型名> IS ARRAY <数据类型>[];

示例

--定义静态数组类型 TYPE STYPE1 IS ARRAY NUMBER[1000]; TYPE STYPE2 IS ARRAY VARCHAR(128)[1000]; --定义动态数组类型 TYPE DTYPE1 IS ARRAY NUMBER[]; TYPE DTYPE2 IS ARRAY VARCHAR(128)[];

1.2.2 数组变量声明

语法

DECLARE <变量名> <数组类型名>; BEGIN ... END;

示例

DECLARE snum STYPE1; sstr STYPE2; dnum DTYPE1; dstr DTYPE2; BEGIN ... END;
说明

动态数组变量声明后,需要分配内存空间才能使用。

语法

<变量> := NEW <数据类型名称>[<数组长度>];

示例

dnum := NEW NUMBER[1000]; dstr := NEW VARCHAR[1000];

1.2.3 数组的使用

  • 通过索引直接访问成员。索引从1开始,不得超过数组的长度,表示数组的第几个成员。

  • <变量名>.SIZE获取数组的大小。

示例

dnum[1] := 1; DRS_SYS.PUT_LINE('dnum size is: ' || dnum.SIZE);

1.3 自定义类型

支持用户基本数据类型的组合,实现自定义类型。

说明

允许自定义类型的嵌套。

语法

TYPE <自定义类型名> DECLARE ... END;

示例

TYPE MYTYPE DECLARE num1 NUMBER(10); str1 VARCHAR(10); str2 VARCHAR(10); END; TYPE MYTYPE_EX DECLARE mt MYTYPE; num1 NUMBER(10); END;
DECLARE mt_ex MYTYPE_EX; BEGIN mt_ex.mt.str1 := 'HELLO DRS!'; mt_ex.num1 := 4400; END;

2 基本语法

2.1 循环语句

支持常见的for/while循环,以及break/continue循环控制语句。

语法

FOR <变量> IN <起始值>..<结束值> LOOP ... --BREAK/CONTINUE END LOOP;
WHILE <条件表达式> LOOP ... --BREAK/CONTINUE END LOOP;
说明

break用于终止跳出循环,continue用于继续下一次循环。仅用于循环体内部。

2.2 条件语句

语法

IF <条件表达式> THEN ... END IF;
IF <条件表达式> THEN ... ELSE ... END IF;
IF <条件表达式> THEN ... ELSIF <条件表达式> THEN ... ... ELSE ... END IF;

2.3 跳转语句

支持goto语句用于无条件跳转到指定标签。

说明

同一语句块中,标签名唯一。

语法

"<<"<标签名>">>" --双尖括号包含
goto <标签名>;

示例

DECLARE i INT; BEGIN i := 1; <<again>> IF i = 100 THEN RETURN; END IF; i := i + 1; GOTO again; END;

2.4 返回语句

用于结束当前函数,并返回值。

语法

RETURN [<返回值>];

2.5 表达式计算

运算符 操作描述
+,- 正、负数标识符
*,/ 乘、除
+,-,||,:: 加、减、字符串连接、二进制连接
=,<,>,<=,>=,<>,!= 比较
NOT 逻辑否定
AND 逻辑与
OR 逻辑或
LIKE,NOT LIKE 字符串匹配运算
  • 运算符优先级从上到下递减。
  • 支持空值NULL,NULL与任何值运算结果都为NULL。
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服