PURGE 过程 - 从管道中除去未接收消息
PURGE 过程除去指定隐式管道中的未接收消息。
提示: 使用 REMOVE_PIPE 函数来删除显式管道。
语法
过程参数
- 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