WAITONE 过程 - 等待指定警报

WAITONE 过程等待指定警报出现。

语法

阅读语法图跳过直观语法图DBMS_ALERT.WAITONE (name,message, status,timeout)

过程参数

name
类型为 VARCHAR(128) 的输入自变量,用于指定警报的名称。
message
类型为 VARCHAR(32672) 的输出自变量,其中包含 SIGNAL 过程发送的消息。
status
类型为 INTEGER 的输出自变量,其中包含过程返回的状态码。可能为以下值:
0
发生了警报。
1
发生了超时。
timeout
类型为 INTEGER 的输入自变量,用于指定等待所指定警报的时间量(以秒计)。

权限

对 DBMS_ALERT 模块的 EXECUTE 特权。

示例

运行 CLP 脚本 waitone.clp 以接收警报 alert_test。

waitone.clp:

SET SERVEROUTPUT ON@

CREATE PROCEDURE proc1()
BEGIN
  DECLARE v_name    VARCHAR(30) DEFAULT 'alert_test';
  DECLARE v_msg     VARCHAR(80);
  DECLARE v_status  INTEGER;
  DECLARE v_timeout INTEGER DEFAULT 20;
  CALL DBMS_ALERT.REGISTER(v_name);
  CALL DBMS_OUTPUT.PUT_LINE('Waiting for signal...');
  CALL DBMS_ALERT.WAITONE(v_name , v_msg , v_status , v_timeout);
  CALL DBMS_OUTPUT.PUT_LINE('Alert name : ' || v_name);
  CALL DBMS_OUTPUT.PUT_LINE('Alert msg : ' || v_msg);
  CALL DBMS_OUTPUT.PUT_LINE('Alert status : ' || v_status);
  CALL DBMS_OUTPUT.PUT_LINE('Alert timeout: ' || v_timeout || ' seconds');
  CALL DBMS_ALERT.REMOVE(v_name);
END@

CALL proc1@

通过另一连接运行脚本 signalalert.clp 以针对警报 alert_test 发出信号。

signalalert.clp:

SET SERVEROUTPUT ON@

CREATE PROCEDURE proc2
BEGIN
  DECLARE v_name VARCHAR(30) DEFAULT 'alert_test';
  CALL DBMS_ALERT.SIGNAL(v_name,'This is the message from ' || v_name);
  CALL DBMS_OUTPUT.PUT_LINE('Issued alert for ' || v_name);
END@

CALL proc2@

脚本 signalalert.clp 生成以下输出:

Issued alert for alert_test

脚本 waitone.clp 生成以下输出:

Waiting for signal...
Alert name : alert_test
Alert msg : This is the message from alert_test
Alert status : 0
Alert timeout: 20 seconds