WAITANY プロシージャー - 任意の登録済みアラートを待機する

WAITANY プロシージャーは、任意の登録済みアラートの発生を待機します。

構文

構文図を読む構文図をスキップするDBMS_ALERT.WAITANY (name,message, status,timeout)

プロシージャー・パラメーター

name
アラートの名前を含む、タイプ VARCHAR (128) の出力引数。
message
SIGNAL プロシージャーによって送信されるメッセージを含む、タイプ VARCHAR (32672) の出力引数。
status
プロシージャーによって戻される状況コードを含むタイプ INTEGER の出力引数。 可能性があるのは以下の値です。
0
アラートが発生しました。
1
タイムアウトが発生しました。
timeout
アラートを待機する時間を秒単位で指定する、タイプ INTEGER の入力引数。

許可

DBMS_ALERT モジュールに対する EXECUTE 特権。

1 つの 接続から waitany.clp という 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 を戻します。