DM系统包学习之四—— DBMS_ALERT包

一、相关方法

1. DBMS_ALERT.REGISTER 为当前会话注册一个预警事件,本操作会提交当前事务。 

    语法:DBMS_ALERT.REGISTER (  NAME IN  VARCHAR(30) ) ;

    说明:NAME 输入参数,预警事件名。 

 2. DBMS_ALERT.REMOVE 删除当前会话的一个预警事件,如果该预警事件正在 DBMS_ALERT.WAITONE 或者 DBMS_ALERT.WAITANY 等待,则被阻塞,直到 DBMS_ALERT.WAITONE 或者 DBMS_ALERT.WAITANY结束。本操作会提交当前事务。 

    语法:DBMS_ALERT. REMOVE (  NAME  IN VARCHAR(30) )  

 3. DBMS_ALERT.REMOVEALL 删除当前会话下所有的预警事件,如果该预警事件正在 DBMS_ALERT.WAITONE 或者 DBMS_ALERT.WAITANY 等待,则被阻塞,直到 DBMS_ALERT.WAITONE 或者 DBMS_ALERT.WAITANY结束。本操作会提交当前事务。

    语法:DBMS_ALERT. REMOVEALL () ;

 4. DBMS_ALERT.SIGNAL 给所有名为name的预警事件发送消息,当前事务提交时生效。 

    语法:DBMS_ALERT. SIGNAL (  NAME  IN  VARCHAR(30),  MESSAGE  IN  VARCHAR(1800) );

    说明:MESSAGE 输入参数,待发送的消息。 

5. DBMS_ALERT.SET_DEFAULTS 设置轮询时间,在DM中无用,只为兼容oracle。 

    语法:DBMS_ALERT. SET_DEFAULTS (  SENSITIVITY  IN INT ) ;

    说明:SENSITIVITY 输入参数,轮询时间间隔,单位秒。参数为NULL,则使用默认值5s。 

6. DBMS_ALERT.WAITONE 预警事件上等待预警信号,获得DBMS_ALERT. SIGNAL发送的消息内容。本操作会提 交当前事务。

    语法:

    DBMS_ALERT. WAITONE (  

       NAME  IN VARCHAR(30),

       MESSAGE  OUT VARCHAR(1800),

       STATUS OUT INT,

       TIMEOUT IN INT DEFAULT 86400000 );

     说明:

     MESSAGE 输出参数,获得DBMS_ALERT. SIGNAL发送的消息。 

     STATUS 输出参数,表示WAITONE是否成功。如果BMS_ALERT. WAITONE传入的NAME是已经注册过的预警,则0表示预警发生;1 表示预警等待超时。 

     TIMEOUT 输入参数,WAITONE的等待超时时间,单位为秒,默认值为86400000秒。如果TIMEOUT设置为空串、null和负值时,DM处理成默认值。

 7.DBMS_ALERT. WAITANY 同DBMS_ALERT. WAITONE。

    语法:

    DBMS_ALERT. WAITANY (  

       NAME  OUT VARCHAR(30),  

       MESSAGE  OUT VARCHAR(1800),  

       STATUS OUT INT,    

       TIMEOUT  IN INT DEFAULT 86400000 ) ;

二、例子:为当前会话注册一个名为 A1 的预警事件,给预警事件上等待预警信号,获得 DBMS_ALERT. SIGNAL发送的消息内容,最后删除当前会话的一个预警事件。同时,会话 1存活期间,可以通过DBMS_ALERT_INFO视图查看到A1预警事件。

会话1: CREATE OR REPLACE PROCEDURE WAIT1 IS

                    msg  VARCHAR(1800);

                    statu INTEGER;  

                BEGIN 

                    dbms_alert.register('A1');  

                   dbms_alert.waitone('A1', msg, statu, 39);

                   print 'Msg: ' || msg || ' Statu: ' || statu;

                  dbms_alert.remove('A1');  

                  END WAIT1;

                  EXEC WAIT1;

同时会话2执行:

 CREATE OR REPLACE PROCEDURE SET_ALERT1 is

    BEGIN

       dbms_alert.signal('A1', 'this is a sig');

       COMMIT;

       END SET_ALERT1;

      /

      EXEC SET_ALERT1; 

    select * from DBMS_ALERT_INFO;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值