REMOVE_PIPE 函数 - 删除管道
REMOVE_PIPE 函数删除显式创建的管道。使用此函数删除 CREATE_PIPE 函数创建的任意公用或专用管道。
语法
返回值
此函数返回类型为 INTEGER 的下列状态码之一。
| 状态码 | 描述 |
|---|---|
| 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