DBMS_ALERT

DBMS_ALERT内置包提供了注册、发送和接收告警的能力。

DBMS_ALERT子程序总览

子程序

说明

REGISTER Procedure

从指定的告警接收消息。

REMOVE Procedure

取消指定告警的通知。

REMOVEALL Procedure

从注册列表中删除此会话的所有告警。

SET_DEFAULTS Procedure

设置轮询时间间隔。

SIGNAL Procedure

发送告警信号。

WAITANY Procedure

在到达超时时间之前等待接收来自会话注册的告警的消息。

WAITone Procedure

在到达超时时间之前等待接收来自指定告警的消息。

REGISTER Procedure

该存储过程用于为当前会话注册指定的告警。

语法

DBMS_ALERT.REGISTER (
   name      IN  VARCHAR2,
   cleanup   IN  BOOLEAN DEFAULT TRUE);

参数说明

参数

说明

name

被注册的告警名称。

cleanup

(可选参数)指定是否对DBMS_ALERT包使用的任何现存的孤立管道进行清理。此清理仅在第一次调研REGISTER时为每个包实例化执行。默认值是TRUE。

示例

该示例展示了如何进行指定告警的注册。

EXEC DBMS_ALERT.REGISTER('alert', TRUE);

REMOVE Procedure

该存储过程用于取消指定告警的通知。

语法

DBMS_ALERT.REMOVE (
   name  IN  VARCHAR2);

参数说明

参数

说明

name

待从注册列表中删除的告警名称。

示例

该示例展示了如何删除指定的告警名称。

EXEC DBMS_ALERT.REMOVE('alert');

REMOVEALL Procedure

该存储过程用于从注册列表中删除此会话的所有告警。

语法

DBMS_ALERT.REMOVEALL;

示例

该示例展示了如何使用该存储过程。

EXEC DBMS_ALERT.REMOVEALL;

SET_DEFAULTS Procedure

该存储过程用于设置轮询时间间隔。

语法

DBMS_ALERT.SET_DEFAULTS (
   sensitivity  IN  NUMBER);

参数说明

参数

说明

sensitivity

轮询的时间间隔,单位为秒。

示例

该示例展示了如何设置轮询的时间间隔。

EXEC DBMS_ALERT.SER_DEFAULTS(0.0001);

SIGNAL Procedure

该存储过程用于产生一条指定名称的告警

语法

DBMS_ALERT.SIGNAL (
   event    IN  VARCHAR2,
   message  IN  VARCHAR2);

参数说明

参数

说明

event

发送消息的告警的名称。

message

告警的具体消息。

示例

该示例展示了如何发送一个告警消息。

EXEC DBMS_ALERT.SIGNAL('alert' ,'This is a alert message.');

WAITANY Procedure

该存储过程用于在到达超时时间之前等待接收来自会话注册的告警的消息。

语法

DBMS_ALERT.WAITANY (
   name      OUT  VARCHAR2,
   message   OUT  VARCHAR2,
   status    OUT  INTEGER,
   timeout   IN   NUMBER DEFAULT MAXWAIT);

参数说明

参数

说明

name

消息所在的告警的名称。

message

告警的具体消息。

status

返回的状态码。取值如下:

  • 0:产生告警。

  • 1:告警超时。

timeout

等待产生告警的时间。单位为秒。

示例

该示例展示了两个会话之间传输告警信息的过程。

-- SESSION A: register an alert and wait any
DECLARE
  name      VARCHAR2;
  msg       VARCHAR2;
  status    INTEGER;
BEGIN
  DBMS_ALERT.REGISTER('alert', TRUE);
  DBMS_ALERT.WAITANY(name, msg, status, 10);

  -- Alert name is: alert
  -- Alert message is: a message from tests
  -- Alert status is: 0
  DBMS_OUTPUT.PUT_LINE('Alert name is: ' || name);
  DBMS_OUTPUT.PUT_LINE('Alert message is: ' || msg);
  DBMS_OUTPUT.PUT_LINE('Alert status is: ' || status);
END;

-- SESSION B: send signal
EXEC DBMS_ALERT.SIGNAL('alert', 'This is a alert message.');

WAITONE Procedure

该存储过程用于在到达超时时间之前等待接收来自指定告警的消息。

语法

DBMS_ALERT.WAITONE (
   name      IN   VARCHAR2,
   message   OUT  VARCHAR2,
   status    OUT  INTEGER,
   timeout   IN   NUMBER DEFAULT MAXWAIT);

参数说明

参数

描述

name

消息所在的告警的名称。

message

告警的具体消息。

status

返回的状态码。取值如下:

  • 0:产生告警。

  • 1:告警超时。

timeout

等待产生告警的时间。单位为秒。

示例

该示例展示了在指定的告警名称没有消息的情况下的输出结果,有消息的情况的输出示例请参考WAITANY

-- SESSION A: register an alert and wait any
DECLARE
  name      VARCHAR2;
  msg       VARCHAR2;
  status    INTEGER;
  timeout   INTEGER;
BEGIN
  DBMS_ALERT.REGISTER('alert', TRUE);
  DBMS_ALERT.WAITONE('alert', msg, status, 10);

  -- Alert message is: a message from tests
  -- Alert status is: 0
  DBMS_OUTPUT.PUT_LINE('Alert message is: ' || msg);
  DBMS_OUTPUT.PUT_LINE('Alert status is: ' || status);
END;

-- SESSION B: send signal
EXEC DBMS_ALERT.SIGNAL('alert', 'This is a alert message.');