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

达梦数据复制软件DMDRS DRS语言使用:DMDRS数据类型(一)

达梦数+数据融合软件(DMDF)产品团队 2026/07/29 163 0 0
摘要 介绍DMDRS DRS语言的DMDRS数据类型,包括DML操作、DML列、DML列数组、DDL操作、DDL列、XREC操作、DB连接、DB结果集、DRS控制台、互斥锁和文件等。

DMDRS定义了部分内部数据类型,并提供变量属性、变量函数等方法来实现特定需求。

1 DML操作

<dml> DRS.DML

描述同步表的DML操作,主要用于数据清洗转换。

1.1 变量属性

序号 语法 类型 说明 附加说明
1 <dml> . #OP VARCHAR(16) 当前操作,如'INSERT','UPDATE','DELETE'。 可修改
2 <dml> . #TRXID BIGINT 当前操作的事务ID。 -
3 <dml> . #LSN BIGINT 当前操作的日志LSN。 -
4 <dml> . #LFS BIGINT 当前操作的日志LFS。 -
5 <dml> . #EPOCH TIMESTAMP(0) 当前操作的日志时间戳。 -
6 <dml> . #SCH VARCHAR(128) 当前操作所属的模式名。 可修改
7 <dml> . #TAB VARCHAR(128) 当前操作所属的表名。 可修改
8 <dml> . #ROWID VARCHAR(32) 当前操作对应的ROWID。 -
9 <dml> . #SQL VARCHAR 当前操作对应的SQL语句。 -
10 <dml> . #HINT VARCHAR(128) 用于指定当前DML操作的HINT子句,初始为空,根据需要设置。 可修改
11 <dml> [:NEW|:OLD] . #COLS INT 返回当前操作的列数。UPDATE可以指定新列或旧列,默认为新列数。 -
12 <dml> . #OBJID BIGINT 当前操作归属的对象ID。 -
13 <dml> . #OPID BIGINT 当前操作的日志OP_ID。 -
14 <dml> . #KEY VARBINARY 用于指定当前DML操作的KEY值,根据需要设置。 可修改

示例

TABLE SYSDBA."*" --省略输入参数(op DRS.DML) BEGIN DRS_SYS.PUT_LINE('OP is: ' || op.#OP); IF op.#OP = 'UPDATE' THEN DRS_SYS.PUT_LINE('NEW COLS NUM is: ' || op:NEW.#COLS); DRS_SYS.PUT_LINE('OLD COLS NUM is: ' || op:OLD.#COLS); ELSE DRS_SYS.PUT_LINE('COLS NUM is: ' || op.#COLS); END IF; DRS_SYS.PUT_LINE('TRXID is: ' || op.#TRXID); DRS_SYS.PUT_LINE('LSN is: ' || op.#LSN); DRS_SYS.PUT_LINE('LFS is: ' || op.#LFS); DRS_SYS.PUT_LINE('EPOCH is: ' || op.#EPOCH); DRS_SYS.PUT_LINE('SCH is: ' || op.#SCH); DRS_SYS.PUT_LINE('TAB is: ' || op.#TAB); DRS_SYS.PUT_LINE('ROWID is: ' || op.#ROWID); DRS_SYS.PUT_LINE('SQL is: ' || op.#SQL); op.exec(); END;

1.2 特殊用法

获取DML操作中的列,用于读取、修改列名或列值。

序号 语法 类型 说明
1 <dml> [:NEW|:OLD] . <列名> DRS.DML_COL 通过列名获取操作的指定列。
2 <dml> . [NEW|OLD] COL ( <列号> INT ) DRS.DML_COL 通过列号获取操作的指定列,列号从1开始,表示第几列。
说明
  • UPDATE操作可以指定新列或旧列,若不指定优先返回新列,不存在才会返回旧列。
  • 如果访问的列不存在,会报错。
  • 获取到的列并非列值,而是DML列类型的变量,具体使用方法参考下一节或示例。
  • 通过列名访问列时,如果存在空格或者与关键词、伪列名冲突,需要使用双引号包含,如op."#OP"。

示例

TABLE SYSDBA."*" --省略输入参数(op DRS.DML) DECLARE i INT; BEGIN IF op.#OP = 'UPDATE' THEN DRS_SYS.PUT_LINE('NEW COLS NUM is: ' || op:NEW.#COLS); DRS_SYS.PUT_LINE('OLD COLS NUM is: ' || op:OLD.#COLS); ELSE DRS_SYS.PUT_LINE('COLS NUM is: ' || op.#COLS); END IF; FOR i IN 1..op:NEW.#COLS LOOP DRS_SYS.PUT_LINE('NEW COL: ' || op.NEWCOL(i).NAME || ', VALUE: ' || op.NEWCOL(i).VALUE); END LOOP; FOR i IN 1..op:OLD.#COLS LOOP DRS_SYS.PUT_LINE('OLD COL: ' || op.OLDCOL(i).NAME || ', VALUE: ' || op.OLDCOL(i).VALUE); END LOOP; RETURN; END;

1.3 变量函数

1.3.1 ADD_COL

功能

当前DML操作添加列。

说明

对于UPDATE操作,未指定新旧列时优先添加新列,已存在同名的新列时再添加旧列。

语法

<dml> . ADD_[NEW|OLD]COL(name, val) RETURN VOID
参数名 类型 说明
name VARCHAR(128) 要添加的列名。
val VARCHAR 要添加的列值。

示例

TABLE SYSDBA.T1 --省略输入参数(op DRS.DML) BEGIN DRS_SYS.PUT_LINE('INPUT SQL is: ' || op.#SQL); op.exec(); --正常同步T1表的操作 IF op.#OP = 'INSERT' THEN op.ADD_COL('DRS_COL', 'MY DATA'); --对于INSERT, 增加一列"DRS_COL", 并且值为'MY_DATA' DRS_SYS.PUT_LINE('NEW SQL is: ' || op.#SQL); END IF; op.exec('T1_TMP'); --将转换后的操作在表T1_TMP上执行 END;

1.3.2 ADD_PLACEHOLDER

功能

添加占位符。部分功能使用。

语法

<dml> . ADD_PLACEHOLDER(name, val) RETURN VOID
参数名 类型 说明
name VARCHAR(128) 要添加的占位符名称。在与JSON模板搭配使用的场景下,名称需要取为模板中声明的变量参数名中#PLACEHOLDER前缀以外的部分。
val VARCHAR 要添加的占位符值。

1.3.3 EXEC

功能

指定模式名、表名执行当前DML操作。

语法

<dml> . EXEC([[sch, ]tab]) RETURN VOID
参数名 类型 说明
sch VARCHAR(128) 可选参数,输出执行的模式名。
tab VARCHAR(128) 可选参数,输出执行的表名。

1.3.4 GET_COLS

功能

获取列的数组,便于批量处理DML操作的列。

说明

对于UPDATE操作,未指定新旧列时优先返回新列数组。

语法

<dml> . GET_[NEW|OLD]COLS() RETURN DRS.DML_COL_ARR

1.3.5 HAS_COL

功能

判断当前DML操作中是否存在指定名称的列。返回值为1或0,表示存在或不存在。

说明

未指定新旧列时优先查找新列,不存在时再查找旧列。

语法

<dml> . HAS_[NEW|OLD]COL(name) RETURN BOOL
参数名 类型 说明
name VARCHAR(128) 指定的列名。

1.3.6 REMOVE_COL

功能

当前DML操作移除列。

说明

对于UPDATE操作,未指定新旧列时优先移除新列,不存在指定名称的新列时再移除旧列。

语法

<dml> . REMOVE_[NEW|OLD]COL(name) RETURN VOID
参数名 类型 说明
name VARCHAR(128) 要移除的列名。

1.3.7 SET_COLS

功能

通过指定列的数组,批量设置DML操作的列。

说明

对于UPDATE操作,未指定新旧列时优先设置新列数组。

语法

<dml> . SET_[NEW|OLD]COLS(cols) RETURN VOID
参数名 类型 说明
cols DRS.DML_COL_ARR 要移除的列名。

1.3.8 USE_COLS

功能

通过指定需要同步的列,将其他不在指定范围内的列移除。

说明

该方法通常不能多次调用,因为列的移除是不可逆的,如果有需要,可以在调用前使用COPY方法保留副本,在副本上进行二次调用。

语法

<dml> . USE_COLS(...) RETURN VOID
参数名 类型 说明
可变参数 VARCHAR 需要同步的列名。

示例

op.USE_COLS('C1', 'C4', 'C5');

1.3.9 COPY

功能

生成一个DML操作的副本。

语法

<dml> . COPY() RETURN DRS.DML

示例

op.COPY();

2 DML列

<dml_col> DRS.DML_COL

描述同步表的DML操作列,可以对该列数据进行读取或者修改,主要用于数据清洗转换。

2.1 变量属性

序号 语法 类型 说明 附加说明
1 <dml_col> . NAME VARCHAR(256) 当前列的名称。 可修改
2 <dml_col> . VALUE VARCHAR 当前列的值。 可修改
3 <dml_col> . IS_KEY BOOL 当前列在源库是否为主键列。 -

示例

TABLE SYSDBA.T1 --省略输入参数(op DRS.DML) BEGIN DRS_SYS.PUT_LINE('INPUT SQL is: ' || op.#SQL); IF op.#COLS > 0 THEN op.COL(1).NAME := 'DRS_COL_NEW';--修改第一列的名称为"DRS_COL_NEW" op.DRS_COL_NEW.VALUE := NULL; --修改名称为"DRS_COL_NEW"的列值为空值 DRS_SYS.PUT_LINE('NEW SQL is: ' || op.#SQL); END IF; END;

3 DML列数组

<dml_col_arr> DRS.DML_COL_ARR

描述一组操作的列,用于批量处理。实际隐式添加了下列语句:

TYPE DRS.DML_COL_ARR IS ARRAY DRS.DML_COL[];

示例1

TABLE "*"."*" --省略输入参数(op DRS.DML) DECLARE new_cols DRS.DML_COL_ARR; old_cols DRS.DML_COL_ARR; i INT; BEGIN new_cols := op.GET_NEWCOLS(); old_cols := op.GET_OLDCOLS(); FOR i IN 1..new_cols.SIZE LOOP DRS_SYS.PUT_LINE('NEW COL: ' || new_cols[i].NAME || ' VALUE: ' || new_cols[i].VALUE); END LOOP; FOR i IN 1..old_cols.SIZE LOOP DRS_SYS.PUT_LINE('OLD COL: ' || old_cols[i].NAME || ' VALUE: ' || old_cols[i].VALUE); END LOOP; op.exec(); END;

示例2

TABLE "*"."*" --省略输入参数(op DRS.DML) DECLARE new_cols DRS.COL_ARR; BEGIN DRS_SYS.PUT_LINE('INPUT SQL is: ' || op.#SQL); --将INSERT转为DELETE IF op.#OP = 'INSERT' THEN new_cols := op.GET_COLS(); --INSERT操作获取的是新列 op.#OP := 'DELETE'; --将INSERT转为DELETE op.SET_COLS(new_cols); --DELETE操作设置的是旧列 DRS_SYS.PUT_LINE('NEW SQL is: ' || op.#SQL); END IF; op.exec(); --执行转换后的DML操作 END;

4 DDL操作

<ddl> DRS.DDL

描述同步表的DDL操作,主要用于数据清洗转换。

4.1 变量属性

序号 语法 类型 说明 附加说明
1 <ddl> . #OP VARCHAR(32) 当前操作,如'CREATE_TABLE'。 -
2 <ddl> . #TRXID BIGINT 当前操作的事务ID。 -
3 <ddl> . #LSN BIGINT 当前操作的日志LSN。 -
4 <ddl> . #LFS BIGINT 当前操作的日志LFS。 -
5 <ddl> . #EPOCH TIMESTAMP(0) 当前操作的日志时间戳。 -
6 <ddl> . #SCH VARCHAR(128) 当前操作所属的模式名。 -
7 <ddl> . #OBJ VARCHAR(128) 当前操作所属的对象名。 -
8 <ddl> . #SQL VARCHAR 当前操作对应的SQL语句。 -
9 <ddl> . #OBJID BIGINT 当前操作归属的对象ID。 -
10 <ddl> . #OPID BIGINT 当前操作的日志OP_ID。 -
11 <ddl> . #KEY VARBINARY 用于指定当前DDL操作的KEY值,根据需要设置。 可修改

4.2 变量函数

4.2.1 ADD_COL

功能

为表相关DDL操作添加新的列定义。

说明
  • 不能是已经存在的列名,否则会报错。
  • 新添加的列默认允许为NULL,可见,无默认值。添加后,可以通过列属性进行修改。

语法

<ddl> . ADD_COL(name, dtype) RETURN VOID
参数名 类型 说明
name VARCHAR(128) 添加列的名称。
dtype VARCHAR(128) 添加列的类型。

示例

OBJECT SYSDBA.T1 --省略输入参数(op DRS.DDL) BEGIN DRS_SYS.PUT_LINE('INPUT SQL is: ' || op.#SQL); --建表时如果不存在C1列, 添加列C1 VARCHAR(100), 添加的列默认可以为NULL, 可见,无默认值 IF op.#OP = 'CREATE_TABLE' AND op.HAS_COL('C1') = 0 THEN op.ADD_COL('C1', 'VARCHAR(100)'); END IF; DRS_SYS.PUT_LINE('OUTPUT SQL is: ' || op.#SQL); op.EXEC(); END;

4.2.2 EXEC

功能

指定模式名、对象名执行当前DDL操作。

语法

<ddl> . EXEC([[sch, ]obj]) RETURN VOID
参数名 类型 说明
sch VARCHAR(128) 可选参数,输出执行的模式名。
obj VARCHAR(128) 可选参数,输出执行的对象名。

4.2.3 HAS_COL

功能

判断当前表相关DDL操作中是否存在指定名称的列。返回值为1或0,表示存在或不存在。

说明

要求DDL对象必须是表,并且是创建或修改表操作,否则会报错。

语法

<ddl> . HAS_COL(name) RETURN BOOL
参数名 类型 说明
name VARCHAR(128) 指定的列名。

4.2.4 REMOVE_COL

功能

移除表相关DDL操作的指定列定义。

语法

<ddl> . REMOVE_COL(name) RETURN VOID
参数名 类型 说明
name VARCHAR(128) 需要移除列的名称。

示例

OBJECT SYSDBA.T1 --省略输入参数(op DRS.DDL) BEGIN DRS_SYS.PUT_LINE('INPUT SQL is: ' || op.#SQL); --建表时如果存在C1列, 移除列C1 IF op.#OP='CREATE_TABLE' AND op.HAS_COL('C1') THEN op.REMOVE_COL('C1'); END IF; DRS_SYS.PUT_LINE('OUTPUT SQL is: ' || op.#SQL); op.EXEC(); END;

4.2.5 ADD_PLACEHOLDER

功能

添加占位符。部分功能使用。

语法

<ddl> . ADD_PLACEHOLDER(name, val) RETURN VOID
参数名 类型 说明
name VARCHAR(128) 要添加的占位符名称。在与JSON模板搭配使用的场景下,名称需要取为模板中声明的变量参数名中#PLACEHOLDER前缀以外的部分。
val VARCHAR 要添加的占位符值。

5 DDL列

<ddl_col> DRS.DDL_COL

描述同步表的DDL操作列,可以对该列数据进行读取或者修改,主要用于数据清洗转换。

5.1 变量属性

序号 语法 类型 说明 附加说明
1 <ddl_col> . NAME VARCHAR(256) 当前列的名称。 可修改
2 <ddl_col> . NULLABLE BOOL 当前列是否可以为NULL。 可修改
3 <ddl_col> . VISIBLE BOOL 当前列是否可见。 可修改
4 <ddl_col> . DEFAULT VARCHAR 当前列的默认值。 可修改

示例

OBJECT SYSDBA.T1 --省略输入参数(op DRS.DDL) BEGIN DRS_SYS.PUT_LINE('INPUT SQL is: ' || op.#SQL); --建表时修改C1列为C1_NEW, 并设置非空属性 IF op.#OP='CREATE_TABLE' AND op.HAS_COL('C1') THEN op.C1.NAME := 'C1_NEW';--修改第一列的名称为"C1_NEW" op.C1_NEW.NULLABLE := 0;--修改C1_NEW为非空属性列 op.C1_NEW.VISIBLE := 0;--修改C1_NEW为不可见 op.C1_NEW.DEFAULT := '''MY DATA''';--设置默认值为'MY_DATA' DRS_SYS.PUT_LINE('NEW SQL is: ' || op.#SQL); END IF; op.EXEC(); END;

6 XREC操作

<xrec> DRS.XREC

用于DMNCDB-REDIS的同步,描述源DMDRS的操作。

6.1 变量属性

序号 语法 类型 说明 附加说明
1 <xrec> . #OP VARCHAR(16) 操作类型。包括'INSERT'、'UPDATE'和'DELETE'。 -
2 <xrec> . #TYPE VARCHAR(16) 操作对象的类型。包括'STRING'、 'HASH'、'LIST'、 'SET'和'ZSET'。 -
3 <xrec> . #DBID BIGINT 操作对象所在的DB号。 -
4 <xrec> . #KEY VARBINARY 当前操作元素的KEY值。所有的操作类型都有KEY值。 -
5 <xrec> . #SUBKEY VARBINARY 当前操作元素的SUBKEY值。'HASH'、'LIST'、'SET'和'ZSET'类型有SUBKEY值。 -
6 <xrec> . #VALUE VARBINARY 当前操作元素的VALUE值。'KEY'、'HASH'、'LIST'和'ZSET'类型有VALUE值。 -
7 <xrec> . #VERSION BIGINT 'LIST'类型操作的VERSION值。 -
8 <xrec> . #FROM_SYNC BOOL 这条日志操作是否来源于其它站点的数据同步。 -

下表说明了各类型日志XREC操作持有的属性。

操作类型 对象类型 持有属性 说明
INSERT/UPDATE STRING KEY -
VALUE -
HASH KEY -
SUBKEY 操作元素所在FIELD值。
VALUE -
LIST KEY -
SUBKEY 操作元素所在INDEX值。
VALUE -
VERSION -
SET KEY -
SUBKEY 操作元素的MEMBER值。
ZSET KEY -
SUBKEY 操作元素的MEMBER值。
VALUE 操作元素的SCORE值。
DELETE STRING KEY -
HASH KEY -
SUBKEY 操作元素所在FIELD值。
LIST KEY -
SUBKEY 操作元素所在INDEX值。
VALUE -
VERSION -
SET KEY -
SUBKEY 操作元素的MEMBER值。
ZSET KEY -
SUBKEY 操作元素的MEMBER值。
VALUE 操作元素的SCORE值。
说明
  • DEL命令对应的日志操作只有KEY值。
  • INDEX值和SCORE值的实际类型为字符串。
  • 日志中的INDEX值为历史值。同一个元素的INDEX值可能因其它元素的插入/删除而改变。

7 DB连接

<dbx> DRS.DBX

用来与指定数据库建立连接,达到执行特定语句的目的。

7.1 变量函数

7.1.1 COMMIT

功能

提交当前连接的事务。返回值为1或0,表示成功或失败。

语法

<dbx> . COMMIT() RETURN BOOL

7.1.2 CONNECT

功能

连接指定的数据库。返回值为1或0,表示成功或失败。

语法

<dbx> . CONNECT(dbtype, server[[, driver], dbname], port, user, password) RETURN BOOL
参数名 类型 说明
dbtype VARCHAR(128) 连接的数据库类型。如DM8、DSC和ORACLE11G。
server VARCHAR(128) 连接的数据库服务名或IP。
driver VARCHAR(128) 可选参数,连接数据库使用的驱动。
dbname VARCHAR(128) 可选参数,数据库名。
port INT 连接的数据库端口号。
user VARCHAR(128) 连接数据库的用户名。
password VARCHAR(32) 连接数据库的密码。

7.1.3 CLOSE

功能

关闭数据库连接。返回值为1或0,表示成功或失败。

语法

<dbx> . CLOSE() RETURN BOOL

7.1.4 EXEC_BIND

功能

单行或批量绑定执行指定的SQL语句。返回值为1或0,表示成功或失败。

说明

批量绑定时,可变参数均为数组,并且数组大小一致。

语法

<dbx> . EXEC_BIND(sql, ...) RETURN BOOL
参数名 类型 说明
sql VARCHAR 指定的SQL语句。
可变参数 基本数据类型 绑定值,如果是数组则表示批量绑定。

7.1.5 EXEC_DDL

功能

执行指定的SQL语句。返回值为1或0,表示成功或失败。

语法

<dbx> . EXEC_DDL(sql) RETURN BOOL
参数名 类型 说明
sql VARCHAR 指定的SQL语句。

7.1.6 EXEC_DML

功能

执行指定的SQL语句,不提交。返回值为1或0,表示成功或失败。

语法

<dbx> . EXEC_DML(sql) RETURN BOOL
参数名 类型 说明
sql VARCHAR 指定的SQL语句。

7.1.7 EXEC_NORMAL

功能

执行指定的SQL语句,可选择是否返回错误。返回值为1或0,表示成功或失败。

语法

<dbx> . EXEC_NORMAL(sql[, ret_err]) RETURN BOOL
参数名 类型 说明
sql VARCHAR 指定的SQL语句。
ret_err BOOL 可选参数,是否返回错误。默认返回。

7.1.8 GET_RES_MD5

功能

查询指定SQL语句,根据返回的结果集计算MD5值。

语法

<dbx> . GET_RES_MD5(sql) RETURN VARBINARY(16)
参数名 类型 说明
sql VARCHAR 指定的查询SQL语句。

7.1.9 ROLLBACK

功能

回滚当前连接的事务。返回值为1或0,表示成功或失败。

语法

<dbx> . ROLLBACK() RETURN BOOL

示例

DECLARE TYPE num_arr IS ARRAY NUMBER(32,0)[]; --数组类型1声明, 用于批量绑定执行 TYPE str_arr IS ARRAY VARCHAR(10)[]; --数组类型2声明, 用于批量绑定执行 db DRS.DBX; --数据库连接 c1 num_arr; --C1列数组 c2 num_arr; --C2列数组 c3 num_arr; --C3列数组 c4 str_arr; --C4列数组 bind_rows INT; --绑定的行数, 等于数组大小 i INT; select_sql STRING; res_md5 VARBINARY(16); BEGIN --连接数据库 db.CONNECT('DM8', '127.0.0.1', 5236, 'SYSDBA', 'SYSDBA'); --创建表SYSDBA.T1 db.EXEC_DDL('DROP TABLE IF EXISTS SYSDBA.T1'); db.EXEC_DDL('CREATE TABLE SYSDBA.T1 ( C1 NUMBER(32,0) NOT NULL, C2 NUMBER(32,0), C3 NUMBER(32,0), C4 VARCHAR(10))'); --构造批量行数据 bind_rows := 10; c1 := NEW NUMBER[bind_rows]; c2 := NEW NUMBER[bind_rows]; c3 := NEW NUMBER[bind_rows]; c4 := NEW VARCHAR[bind_rows]; FOR i IN 1..bind_rows LOOP c1[i] := 10000 + i; c2[i] := i * 10; c3[i] := 4000 + i; c4[i] := 'BIND:' || i; END LOOP; --批量绑定执行 db.EXEC_BIND('INSERT INTO SYSDBA.T1 VALUES(:1, :2, :3, :4)', c1, c2, c3, c4); db.COMMIT(); --计算查询结果集的MD5值 select_sql := 'SELECT * FROM SYSDBA.T1'; res_md5 := db.GET_RES_MD5(select_sql); DRS_SYS.PUT_LINE(select_sql); DRS_SYS.PUT_LINE('result md5 is : 0x' || res_md5); --关闭数据库连接 db.CLOSE(); END;

8 DB结果集

<res> DRS.RESULT

用来查询数据库结果集。

8.1 变量属性

序号 语法 类型 说明 附加说明
1 <res> . COLS INT 当前返回结果集的列数。 -
2 <res> . <列名> VARCHAR 当前行结果集中,指定列名的值。 -
说明

如果列名存在空格或者与关键词、属性名冲突,需要使用双引号包含。

8.2 变量函数

8.2.1 COL_NAME

功能

通过列号获取指定结果集列位置的列名。

语法

<res> . COL_NAME(ind) RETURN VARCHAR(256)
参数名 类型 说明
ind INT 列位置,从1开始,不超过结果集列数。

8.2.2 COL_TYPE

功能

通过列号获取指定结果集列位置的列类型。

语法

<res> . COL_TYPE(ind) RETURN VARCHAR(256)
参数名 类型 说明
ind INT 列位置,从1开始,不超过结果集列数。

8.2.3 COL_VAL

功能

通过列号获取指定结果集列位置的列值,均已转字符串。

语法

<res> . COL_VAL(ind) RETURN VARCHAR
参数名 类型 说明
ind INT 列位置,从1开始,不超过结果集列数。

8.2.4 CREATE

功能

初始化,创建结果集。返回值为1或0,表示成功或失败。

语法

<res> . CREATE(dbx) RETURN BOOL
参数名 类型 说明
dbx DRS.DBX 指定已经连接成功的数据库连接,用于查询结果集。

8.2.5 FETCH

功能

查询结果集,获取第一行数据,支持参数绑定。返回值为1或0,表示有数据或无数据。

语法

<res> . FETCH(sql, ...) RETURN BOOL
参数名 类型 说明
sql VARCHAR 指定的查询SQL语句。
可变参数 基本数据类型 绑定值。

8.2.6 FETCH_NEXT

功能

提取下一行数据,需要先调用FETCH。返回值为1或0,表示有数据或无数据。

语法

<res> . FETCH_NEXT() RETURN BOOL

8.2.7 FREE

功能

释放结果集。返回值为1或0,表示成功或失败。

语法

<res> . FREE() RETURN BOOL

示例

--自定义函数, 用于打印当前行信息 FUNCTION PRINT_RESULT_ROW (row_num INT, db_res DRS.RESULT) DECLARE i INT; BEGIN DRS_SYS.PUT_LINE('[ROW] ' || row_num); FOR i IN 1..db_res.COLS LOOP DRS_SYS.PUT_LINE('[', db_res.NAME(i), '] ', db_res.VALUE(i)); END LOOP; END; DECLARE db DRS.DBX; db_res DRS.RESULT; row_num INT; BEGIN --DB CONNECT/RES CREATE/MAKE SQL db.CONNECT('DM8', '127.0.0.1', 5236, 'SYSDBA', 'SYSDBA'); db_res.CREATE(db); row_num := 0; --FETCH ALL ROWS IF db_res.FETCH('SELECT * FROM TEST.T1') THEN row_num := row_num + 1; PRINT_RESULT_ROW(row_num, db_res); WHILE db_res.FETCH_NEXT() LOOP row_num := row_num + 1; PRINT_RESULT_ROW(row_num, db_res); END LOOP; END IF; --RES FREE/DB CLOSE db_res.FREE(); db.CLOSE(); END;

9 DRS控制台

<csl> DRS.CONSOLE

通过控制台连接DMDRS服务,用于查看监控消息或者发送命令。

9.1 变量属性

序号 语法 类型 说明 附加说明
1 <csl> . ROWS INT 监控命令返回表格数据的行数。 -
2 <csl> . COLS INT 监控命令返回表格数据的列数。 -

9.2 变量函数

9.2.1 CLOSE

功能

断开控制台连接。返回值为1或0,表示成功或失败。

语法

<csl> . CLOSE() RETURN BOOL

9.2.2 CMD

功能

发送指令到DMDRS服务。返回值为1或0,表示成功或失败。

说明

监控命令执行成功后,监控数据将保存于内存中。如果执行新的监控命令,旧的数据将被覆盖。

语法

<csl> . CMD(cmd) RETURN BOOL <csl> . COMMAND(cmd) RETURN BOOL
参数名 类型 说明
cmd VARCHAR 命令。参考《DMDRS参考手册》

9.2.3 CONNECT

功能

连接DMDRS服务。返回值为1或0,表示成功或失败。

语法

<csl> . CONNECT(server, port) RETURN BOOL
参数名 类型 说明
server VARCHAR(128) DMDRS服务所在的IP地址。
port INT DMDRS服务所使用的端口号。

9.2.4 GET_VAL

功能

指定行列,获取监控的表格数据,以字符串形式返回。

语法

<csl> . GET_VAL(row, col) RETURN VARCHAR <csl> . GET_VALUE(row, col) RETURN VARCHAR
参数名 类型 说明
row INT 指定的行。
col INT 指定的列。

示例

--自定义函数:打印指定列 FUNCTION PRINT_SHOW_COL (col_num INT, csl DRS.CONSOLE) DECLARE i INT; BEGIN FOR i IN 1..csl.ROWS LOOP DRS_SYS.PUT_LINE('[ROW(', i, ')][COL(', col_num, ')] ', csl.GET_VAL(i, col_num)); END LOOP; END; --自定义函数:打印指定行 FUNCTION PRINT_SHOW_ROW (row_num INT, csl DRS.CONSOLE) DECLARE j INT; BEGIN FOR j IN 1..csl.COLS LOOP DRS_SYS.PUT_LINE('[ROW(', row_num, ')][COL(', j, ')] ', csl.GET_VAL(row_num, j)); END LOOP; END; --自定义函数:在监控表格数据中查找指定str并打印所在行 FUNCTION SEARCH_AND_SHOW_COL (str VARCHAR, csl DRS.CONSOLE) DECLARE i INT; j INT; BEGIN FOR i IN 1..csl.ROWS LOOP FOR j IN 1..csl.COLS LOOP IF str = csl.GET_VAL(i, j) THEN PRINT_SHOW_ROW(i, csl); END IF; END LOOP; END LOOP; END; --自定义函数:在监控表格数据中查找指定str并打印所在列 FUNCTION SEARCH_AND_SHOW_ROW (str STRING, csl DRS.CONSOLE) DECLARE i INT; j INT; BEGIN FOR i IN 1..csl.ROWS LOOP FOR j IN 1..csl.COLS LOOP IF str = csl.GET_VAL(i, j) THEN PRINT_SHOW_COL(j, csl); END IF; END LOOP; END LOOP; END;

10 互斥锁

<mtx> DRS.MUTEX

主要用于多线程情景下,对全局变量的访问和修改。

10.1 变量函数

10.1.1 DESTROY

功能

释放互斥锁。

语法

<mtx> . DESTROY() RETURN VOID

10.1.2 INIT

功能

初始化互斥锁。

语法

<mtx> . INIT() RETURN VOID

10.1.3 LOCK

功能

上锁。

语法

<mtx> . LOCK() RETURN VOID

10.1.4 UNLOCK

功能

解锁。

语法

<mtx> . UNLOCK() RETURN VOID

11 文件

<file> DRS.FILE

用于对本地文件的读写。

11.1 变量属性

序号 语法 类型 说明 附加说明
1 <file> . SIZE BIGINT 当前打开文件的大小。 -

11.2 变量函数

11.2.1 CLOSE

功能

关闭文件。返回值为1或0,表示成功或失败。

语法

<file> . CLOSE() RETURN BOOL

11.2.2 OPEN

功能

打开或创建文件。返回值为1或0,表示成功或失败。

说明

文件打开后,内部将维护读写偏移位置,每次读写都将更新对应偏移。写偏移初始为文件末尾,读偏移初始为文件开头。

语法

<file> . OPEN(path[, mod]) RETURN BOOL
参数名 类型 说明
path VARCHAR(256) 文件所在路径。
mod VARCHAR(32) 可选参数,文件打开方式,具体值如下:
'CREATE':打开文件,如果不存在则创建。
'TRUNC':打开文件并清空内容,如果不存在则创建。
未指定时,打开已存在的文件。

11.2.3 PUT

功能

在文件末尾追加写入字符串。返回值为1或0,表示成功或失败。

说明

写入成功后,内部读偏移位置更新至写入数据末尾。

语法

<file> . PUT(str) RETURN BOOL
参数名 类型 说明
str VARCHAR 要写入的字符串。

11.2.4 PUT_LINE

功能

在文件末尾追加写入字符串,并补充换行符“\r\n”。返回值为1或0,表示成功或失败。

说明

写入成功后,内部读偏移位置更新至写入数据末尾。

语法

<file> . PUT_LINE(str) RETURN BOOL
参数名 类型 说明
str VARCHAR 要写入的字符串。

11.2.5 READ

功能

读取指定大小的二进制数据,可指定文件偏移位置。

说明

读取成功后,内部读偏移位置更新至读取数据末尾。

语法

<file> . READ(size[, offset]) RETURN VARBINARY
参数名 类型 说明
size INT 要读取的数据字节数,实际读取大小不会超过文件大小。
offset BIGINT 可选参数,读取的文件偏移位置,默认为当前读偏移位置。

11.2.6 WRITE

功能

写入二进制数据,可指定文件偏移位置。返回值为1或0,表示成功或失败。

说明

写入成功后,内部写偏移位置更新至写入数据末尾。

语法

<file> . WRITE(data[, offset]) RETURN BOOL
参数名 类型 说明
data VARBINARY 要写入的二进制数据。
offset BIGINT 可选参数,写入的文件偏移位置,默认为当前写偏移位置。
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服