REMOVE_PIPE 関数 - パイプを削除する
REMOVE_PIPE 関数は、作成されたパイプを明示的に削除します。 CREATE_PIPE 関数によって作成された任意のパブリックまたはプライベート・パイプを削除するには、この関数を使用します。
構文
戻り値
この関数は、タイプ INTEGER の以下の状況コードの 1 つを戻します。
| 状況コード | 説明 |
|---|---|
| 0 | パイプは正常に除去されたか存在しません |
| NULL | 例外がスローされました |
関数のパラメーター
- 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 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: 0proc2 から
RECEIVE_MESSAGE status: 0
Item: Message #1proc3 からRECEIVE_MESSAGE status: 1