PURGE プロシージャー - 受信されていないメッセージをパイプから除去する

PURGE プロシージャーは、指定された暗黙的パイプの受信されていない除去を除去します。

ヒント: 明示的パイプを削除するには、REMOVE_PIPE 関数を使用します。

構文

構文図を読む構文図をスキップするDBMS_PIPE.PURGE (pipename )

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

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