DBMS_ALERT 模块
DBMS_ALERT 模块提供一组过程,用于注册警报、发送警报和接收警报。
警报存储在 SYSTOOLS.DBMS_ALERT_INFO 中,SYSTOOLS.DBMS_ALERT_INFO 是您第一次对每个数据库引用此模块时在 SYSTOOLSPACE 中创建的。
此模块的模式为 SYSIBMADM。
DBMS_ALERT 模块包括以下内置例程。
| 例程名称 | 描述 |
|---|---|
| REGISTER 过程 | 注册当前会话以接收指定的警报。 |
| REMOVE 过程 | 除去指定的警报的注册。 |
| REMOVEALL 过程 | 除去所有警报的注册。 |
| SIGNAL 过程 | 用信号表明指定警报的出现。 |
| SET_DEFAULTS 过程 | 设置 WAITONE 和 WAITANY 过程的轮询时间间隔。 |
| WAITANY 过程 | 等待任何已注册警报出现。 |
| WAITONE 过程 | 等待指定的警报出现。 |
用法说明
当您想要针对特定事件发送警报时,DBMS_ALERT 模块中的过程非常有用。例如,您可能想要在因为一个或多个表发生更改而导致触发器激活时发送警报。
DBMS_ALERT 模块要求将数据库配置参数 CUR_COMMIT 设置为 ON。
要在 SYSTOOLSPACE 表空间中成功创建 SYSTOOLS.DBMS_ALERT_INFO 表,如果首次运行 DBMS_ALERT 模块,请确保您具有 CREATETAB 权限。
示例
触发器 TRIG1 激活时,从连接 1 向连接 2 发送警报。首先,创建表和触发器。
CREATE TABLE T1 (C1 INT)@
CREATE TRIGGER TRIG1
AFTER INSERT ON T1
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN ATOMIC
CALL DBMS_ALERT.SIGNAL( 'trig1', NEW.C1 );
END@
从连接 1 发出 INSERT 语句。
INSERT INTO T1 values (10)@
-- Commit to send messages to the listeners (required in early program)
CALL DBMS_ALERT.COMMIT()@
从连接 2 进行注册以接收警报 trig1 并等待该警报出现。
CALL DBMS_ALERT.REGISTER('trig1')@
CALL DBMS_ALERT.WAITONE('trig1', ?, ?, 5)@
此示例生成以下输出:
Value of output parameters
--------------------------
Parameter Name : MESSAGE
Parameter Value : -
Parameter Name : STATUS
Parameter Value : 1
Return Status = 0