DBMS_ALERT包
DBMS_ALERT系统包是为了在DM上兼容oracle的DBMS_ALERT系统包。用于生成并传递数据库预警信息,当发生特定数据库事件时能够将预警信息传递给应用程序。 达梦还提供了DBMS_ALERT_INFO视图来实现跟ORACLE类似的功能,查看注册过的预警事件。 DM MPP环境和DM DSC环境下不支持DBMS_ALERT包。
1.DBMS_ALERT.REGISTER 为当前会话注册一个预警事件,本操作会提交当前事务。
NAME 输入参数,预警事件名。
2.DBMS_ALERT.REMOVE 删除当前会话的一个预警事件,如果该预警事件正在DBMS_ALERT.WAITONE或者DBMS_ALERT.WAITANY等待,则被阻塞,直到DBMS_ALERT.WAITONE或者DBMS_ALERT.WAITANY结束。本操作会提交当前事务
NAME 输入参数,预警事件名。
3.DBMS_ALERT.REMOVEALL 删除当前会话下所有的预警事件,如果该预警事件正在DBMS_ALERT.WAITONE或者DBMS_ALERT.WAITANY等待,则被阻塞,直到DBMS_ALERT.WAITONE或者DBMS_ALERT.WAITANY结束。本操作会提交当前事务。
4.DBMS_ALERT.SIGNAL 给所有名为name的预警事件发送消息,当前事务提交时生效。
NAME 输入参数,预警事件名。 MESSAGE 输入参数,待发送的消息。
5.DBMS_ALERT.SET_DEFAULTS 设置轮询时间,在DM中无用,只为兼容oracle。
SENSITIVITY 输入参数,轮询时间间隔,单位秒。参数为NULL,则使用默认值5s。
6.DBMS_ALERT.WAITONE 预警事件上等待预警信号,获得DBMS_ALERT. SIGNAL发送的消息内容。本操作会提交当前事务。
NAME 输入参数,预警事件名。
MESSAGE 输出参数,获得DBMS_ALERT. SIGNAL发送的消息。
STATUS 输出参数,表示WAITONE是否成功。如果BMS_ALERT. WAITONE传入的NAME是已经注册过的预警,则0 表示预警发生;1 表示预警等待超时。
TIMEOUT 输入参数,WAITONE的等待超时时间,单位为秒,默认值为86400000秒。
DBMS_ALERT. WAITANY 语法如下:
DBMS_ALERT. WAITANY ( NAME OUT VARCHAR(30), MESSAGE OUT VARCHAR(1800), STATUS OUT INT, TIMEOUT IN INT DEFAULT 86400000 )
参数详解 同DBMS_ALERT. WAITONE。
功能说明: 等待当前会话任意一个预警信号,获得DBMS_ALERT. SIGNAL发送的消息内容。本操作会提交当前事务。会话上没有预警事件时,报错没有注册预警事件。
开启二个会话验证
会话一
SP_CREATE_SYSTEM_PACKAGES (1,‘DBMS_ALERT’); 开启包
create or REPLACE PROCEDURE aa is
msg VARCHAR(1800);
status INTERGER;
BEGIN
dbms_alter.register(‘A1’);//创建一个预警事件A1
dbms_alter.waitone(‘A1’,msg,status,39);//预警事件等待预警信号,事件A1,输出1800,输出是否成功N或Y,等待超时39秒
print ‘msg:’||msg||‘status:’||status;
输出msg和status值,当前应该为1800和n
dbms_alter.remove(‘A1’);
删预警事件A1
END WAIT1;
/
EXEC WAIT1;
select * from DBMS_ALERT_INFO;
编译错误是因为,waitone方法,当39秒执行完毕事件删除
会话二
CREATE OR REPLACE PROCEDURE SET_ALERT1 is
BEGIN
dbms_alert.signal(‘A1’, ‘this is a sig’);
修改A1的发送消息
COMMIT;
END SET_ALERT1;
/
EXEC SET_ALERT1;
select * from DBMS_ALERT_INFO;
30秒后因事件删除为空
DBMS_BINARY 包
SP_CREATE_SYSTEM_PACKAGES (1,‘DBMS_BINARY’);
SET SERVEROUTPUT on ;
此参数作用于disql
开启时一般使用
SET SERVEROUTPUT ON FORMAT WORD_WRAPPED 或者
SET SERVEROUTPUT ON FORMAT TRUNCATED
dm8管理工具现在只能设置这三个值
使用管理工具
使用disql
此时没有打印
加入SET SERVEROUTPUT ON FORMAT WORD_WRAPPED
BINARY_SET_TINYINT 从二进制流VB中偏移OFFSET开始的位置写入一个TINYINT型数据。
因为DBMS_BINARY包所支持的8个过程和8个函数参数意义相同,如下统一说明:
VB 用户输入的二进制流。
OFFSET 向二进制流中写入数据或者从二进制流取出数据时的偏移量。
LENGTH 表示从二进制流指定偏移位置开始取多少个字符。
VALUE 待写入的数据。
Set方法一般为VB,OFFSET或者
VB,OFFSET,VALUE因为是二进制流的格式CHAR、VARCHAR、TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE类型数据
其实可以理解为redis键值对,redis key为VB ,hash键key为 LENGTH,通过键取value
偏移量可以理解为偏移地址,对应的应该是di do ai ao一般要根据排序规则来设置,而达梦固定使用主机地址,偏移地址大小最大值也应该是固定的
当为3时不报错
当为4时报错
默认的偏移地址最大为16,那么di do ai ao地址应该都占四个,而排序规则不确定,DI应该在最前面,对应的是数字量输入,大胆推测顺序为 DI DO AI AO