PURGE 过程 - 从管道中除去未接收消息

PURGE 过程除去指定隐式管道中的未接收消息。

提示: 使用 REMOVE_PIPE 函数来删除显式管道。

语法

阅读语法图跳过直观语法图DBMS_PIPE.PURGE (pipename)

过程参数

pipename
类型为 VARCHAR(128) 的输入自变量,用于指定隐式管道的名称。

权限

对 DBMS_PIPE 模块的 EXECUTE 特权。

示例

在 proc1 中,在管道上发送以下两条消息: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