PURGE プロシージャー - 受信されていないメッセージをパイプから除去する
PURGE プロシージャーは、指定された暗黙的パイプの受信されていない除去を除去します。
ヒント: 明示的パイプを削除するには、REMOVE_PIPE 関数を使用します。
構文
プロシージャー・パラメーター
- pipename
- 暗黙的パイプの名前を指定する、タイプ VARCHAR (128) の入力引数。
許可
DBMS_PIPE モジュールに対する EXECUTE 特権。
例
proc1 では、 パイプ上に 2 つのメッセージ、Message #1 および Message #2 を送信します。proc2 では、 最初のメッセージを受信して、解凍し、パイプをパージします。 proc3 を実行する と、使用可能なメッセージがないため、RECEIVE_MESSAGE 関数の呼び出しがタイムアウトになり、状況コード 1 が戻されます。
SET SERVEROUTPUT ON@
CREATE PROCEDURE proc1()
BEGIN
DECLARE v_status INTEGER;
DECLARE status INTEGER;
SET status = DBMS_PIPE.PACK_MESSAGE('Message #1');
SET v_status = DBMS_PIPE.SEND_MESSAGE('pipe');
CALL DBMS_OUTPUT.PUT_LINE('SEND_MESSAGE status: ' || v_status);
SET status = DBMS_PIPE.PACK_MESSAGE('Message #2');
SET v_status = DBMS_PIPE.SEND_MESSAGE('pipe');
CALL DBMS_OUTPUT.PUT_LINE('SEND_MESSAGE status: ' || v_status);
END@
CREATE PROCEDURE proc2()
BEGIN
DECLARE v_item VARCHAR(80);
DECLARE v_status INTEGER;
SET v_status = DBMS_PIPE.RECEIVE_MESSAGE('pipe',1);
CALL DBMS_OUTPUT.PUT_LINE('RECEIVE_MESSAGE status: ' || v_status);
CALL DBMS_PIPE.UNPACK_MESSAGE_CHAR(v_item);
CALL DBMS_OUTPUT.PUT_LINE('Item: ' || v_item);
CALL DBMS_PIPE.PURGE('pipe');
END@
CREATE PROCEDURE proc3()
BEGIN
DECLARE v_item VARCHAR(80);
DECLARE v_status INTEGER;
SET v_status = DBMS_PIPE.RECEIVE_MESSAGE('pipe',1);
CALL DBMS_OUTPUT.PUT_LINE('RECEIVE_MESSAGE status: ' || v_status);
END@
CALL proc1@
CALL proc2@
CALL proc3@
この例では、以下の出力が結果として戻ります。
proc1 から
SEND_MESSAGE status: 0
SEND_MESSAGE status: 0
proc2 から
RECEIVE_MESSAGE status: 0
Item: Hi, Sujata
proc3 から
RECEIVE_MESSAGE status: 1