• 四、dbms_alert(用于生成并传递数据库预警信息)


    1、概述

    作用:用于生成并传递数据库预警信息.使用包DBMS_ALERT,则必须以SYS登陆,为该用户授予执行权限.
    sql>conn sys/oracle as sysdba
    sql>grant execute on dbms_alert to scott;

    2、包的组成

    1)、register
    说明:用于注册预警事件
    语法:dbms_alter.register(name in varchar2);
    其中name指定预警事件名称,其值不能超过30字节。
    例子:exec dbms_alter.register('alter1');

    2)、remove
    说明:用于删除会话不需要的预警事件.
    语法:dbms_alert.remove(name in varchar2);
    例子:exec dbms_alert.remove('alert1');

    3)、removeall
    说明:用于删除当前会话所有已注册的预警事件
    语法:dbms_alter.removeall

    4)、set_defaults
    说明:用于设置检测预警事件的时间间隔,默认时间间隔为5秒
    语法:dbms_alert.set_defaults(sensitivity in number);
    例子:dbms_alert.set_defaults(20)

    5)、signal
    说明:用于指定预警事件所对应的预警消息。只有在提交事务时才会发出预警信号,而当回退事务时不会发出预警信号。
    语法:dbms_alert.signal(name in varchar2,message in varchar2);
    其中message指定预警事件的消息,长度不超过1800字节。
    例子:exec dbms_alert.signal('alert1','hello');

    6)、waitany
    说明:用于等待当前会话的任何预警事件,并且在预警事件发生时输出相应信息.在执行该过程之前,会隐含地发出COMMIT.
    语法:
    dbms_alter.waitany(name out varchar2,message out varchar2,status out integer,timeout in number default maxwait);
    其中status用于返回状态值,返回0表示发生了预警事件,返回1表示超时;timeout用于设置预警事件的超时时间.

    7)、waitone
    说明:用于等待当前会话的特定预警事件,并且在发生预警事件时输出预警消息.在执行该过程之前,会隐含地发出COMMIT.
    dbms_alter.waitone(name out varchar2,message out varchar2,status out integer,timeout in number default maxwait);

    3、应用实例

    修改员工工资时发出预警
    create or replace trigger tr_upd_sal
    after update of sal on emp
    begin
    dbms_alert.signal('sal_upd_alert','修改了雇员工资');
    end;

    create or replace procedure wait_event(name varchar2) is
    message varchar2(200);
    status int;
    begin
    dbms_alert.register(name);
    dbms_alert.waitone(name,message,status);
    if status=0 then
    dbms_output.put_line(message);
    end if;
    dbms_alert.remove(name);
    end wait_event;

    set serveroutput on
    begin
    for i in 1..5 loop
    wait_event('sal_upd_alert');
    end loop;
    end;

  • 相关阅读:
    [转]为什么udp为什么不能发送大于1472字节数据
    曾经的那些入过的坑 内网中部署bcos
    安装FISCO-BCOS的那些坑
    springcloud基础入门
    BCOS常见的问题
    软件测试工程师必须要知道的9点
    十款APP开发框架
    Thinkphp开源框架如何使用?
    软件测试工程师面试必须要注意的7点
    一个APP开发有那么难吗?
  • 原文地址:https://www.cnblogs.com/champaign/p/9468461.html
Copyright © 2020-2023  润新知