REMOVE_PIPE 函数 - 删除管道

REMOVE_PIPE 函数删除显式创建的管道。使用此函数删除 CREATE_PIPE 函数创建的任意公用或专用管道。

语法

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

返回值

此函数返回类型为 INTEGER 的下列状态码之一。

表 1. REMOVE_PIPE 状态码
状态码 描述
0 已成功除去管道或管道不存在
NULL 抛出了异常

函数参数

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  v_status = DBMS_PIPE.CREATE_PIPE('pipe1');
  CALL DBMS_OUTPUT.PUT_LINE('CREATE_PIPE status : ' || v_status);

  SET status = DBMS_PIPE.PACK_MESSAGE('Message #1');
  SET v_status = DBMS_PIPE.SEND_MESSAGE('pipe1');
  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('pipe1');
  CALL DBMS_OUTPUT.PUT_LINE('SEND_MESSAGE status: ' || v_status);
END@

CREATE PROCEDURE proc2()
BEGIN
  DECLARE    v_item          VARCHAR(80);
  DECLARE    v_status        INTEGER;
  DECLARE    status          INTEGER;
  SET v_status = DBMS_PIPE.RECEIVE_MESSAGE('pipe1',1);
  CALL DBMS_OUTPUT.PUT_LINE('RECEIVE_MESSAGE status: ' || v_status);
  CALL DBMS_PIPE.UNPACK_MESSAGE(v_item);
  CALL DBMS_OUTPUT.PUT_LINE('Item: ' || v_item);
  SET status = DBMS_PIPE.REMOVE_PIPE('pipe1');
END@

CREATE PROCEDURE proc3()
BEGIN
  DECLARE    v_item          VARCHAR(80);
  DECLARE    v_status        INTEGER;
  SET v_status = DBMS_PIPE.RECEIVE_MESSAGE('pipe1',1);
  CALL DBMS_OUTPUT.PUT_LINE('RECEIVE_MESSAGE status: ' || v_status);
END@

CALL proc1@

CALL proc2@

CALL proc3@

此示例生成以下输出。

在 proc1 中:

CREATE_PIPE status : 0
SEND_MESSAGE status: 0
SEND_MESSAGE status: 0

在 proc2 中:

RECEIVE_MESSAGE status: 0
Item: Message #1
在 proc3 中:
RECEIVE_MESSAGE status: 1