WAITANY 过程 - 等待任何已注册警报
WAITANY 过程等待任何已注册警报出现。
语法
过程参数
- name
- 类型为 VARCHAR(128) 的输出自变量,其中包含警报的名称。
- message
- 类型为 VARCHAR(32672) 的输出自变量,其中包含 SIGNAL 过程发送的消息。
- status
- 类型为 INTEGER 的输出自变量,其中包含过程返回的状态码。可能为以下值:
- 0
- 发生了警报。
- 1
- 发生了超时。
- timeout
- 类型为 INTEGER 的输入自变量,用于指定等待警报的时间量(以秒计)。
权限
对 DBMS_ALERT 模块的 EXECUTE 特权。
示例
通过一个连接运行 CLP 脚本 waitany.clp 以接收任何已注册警报。
waitany.clp:
SET SERVEROUTPUT ON@
CREATE PROCEDURE proc1()
BEGIN
DECLARE v_name VARCHAR(30);
DECLARE v_msg VARCHAR(80);
DECLARE v_status INTEGER;
DECLARE v_timeout INTEGER DEFAULT 20;
CALL DBMS_ALERT.REGISTER('alert_test');
CALL DBMS_ALERT.REGISTER('any_alert');
CALL DBMS_OUTPUT.PUT_LINE('Registered for alert alert_test and any_alert');
CALL DBMS_OUTPUT.PUT_LINE('Waiting for signal...');
CALL DBMS_ALERT.WAITANY(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.REMOVEALL;
END@
call proc1@
通过另一个连接运行脚本 signal.clp 以对警报 any_alert 发出信号。
signal.clp:
SET SERVEROUTPUT ON@
CREATE PROCEDURE proc2
BEGIN
DECLARE v_name VARCHAR(30) DEFAULT 'any_alert';
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@脚本 signal.clp 生成以下输出:
Issued alert for any_alert
脚本 waitany.clp 生成以下输出:
Registered for alert alert_test and any_alert
Waiting for signal...
Alert name : any_alert
Alert msg : This is the message from any_alert
Alert status : 0
Alert timeout: 20 seconds使用说明
如果调用 WAITANY 过程时未注册任何警报,那么该过程会返回 SQL0443N。
