すべてのプロダクト
Search
ドキュメントセンター

PolarDB:DBMS_PIPE

最終更新日:Jun 04, 2024

組み込みDBMS_PIPEパッケージは、同じクラスターに接続されているセッション内またはセッション間でメッセージを転送するために使用されます。

使用上の注意

長時間のトランザクションの発生を防ぐために、クラスターエンドポイントにDBMS_PIPEパッケージを使用しないことを推奨します。

サブプログラム

サブプログラム

説明

CREATE_PIPE関数

名前付きパイプラインを作成します。

NEXT_ITER_TYPE関数

バッファ内の次のデータ項目のデータ型を返します。

PACK_MESSAGEプロシージャ

セッションのローカルメッセージバッファにデータ項目を配置します。

UNPACK_MESSAGEプロシージャ

バッファ内の次のデータ項目にアクセスします。

パージ手続き

名前付きパイプラインの内容を消去します。

RECEIVE_MESSAGE関数

名前付きパイプラインからローカルバッファにメッセージをコピーします。

REMOVE_PIPE関数

名前付きパイプラインを削除します。

RESET_BUFFERプロシージャ

ローカルバッファの内容を消去します。

SEND_MESSAGE関数

名前付きパイプラインにメッセージを送信します。

UNIQUE_SESSION_NAME関数

現在のセッションの一意の名前を返します。

CREATE_PIPE関数

この関数は、名前付きパイプラインを作成するために使用されます。

構文

<bx id="1" type="code" text="code id=" dxfqnh "title=" "uuuid=" lir6affcxgwsh6umb3m "code=" DBMS_PIPE.CREATE_PIPE ()
pipename IN VARCHAR2、INTEGER DEFAULT 8192のmaxpipesize、プライベートIN BOOLEAN DEFAULT TRUE)
RETURN INTEGER;"data-tag=" codeblock "outputclass=" language-postgresql ""/>DBMS_PIPE.CREATE_PIPE (
   pipename IN VARCHAR2、
   INTEGER DEFAULT 8192のmaxpipesize、
   プライベートIN BOOLEAN DEFAULT TRUE)
戻りますインテガー; 

Parameters

パラメーター

説明

pipename

パイプラインの名前。

maxpipesize

(オプション) パイプラインの最大容量 (バイト単位) 。 デフォルト値は 8192 です。

private

(オプション) プライベートパイプラインを作成するかどうかを指定します。 有効な値:

  • TRUE (デフォルト): 作成されたパイプラインはプライベートパイプラインです。

  • FALSE: 作成されたパイプラインはプライベートパイプラインではありません。

戻り値

戻り値

説明

INTEGER

パイプラインの作成に返されるステータスコード。 値0は、パイプラインが正常に作成されたことを示します。

次の例は、名前付きパイプラインを作成する方法を示しています。

<bx id="1" type="code" text="code id=" 0i4ugn "title=" "uuid=" lir6e7n8sjib5ggn4c "code=" DECLARE
ステータスINTEGER;
開始
ステータス:= DBMS_PIPE.CREATE_PIPE ('message');
DBMS_OUTPUT.PUT_LINE('CREATE_PIPEステータス: '| | ステータス);
END;"data-tag=" codeblock "outputclass=" language-postgresql ""/>DECLARE
    ステータスINTEGER;
開始
    ステータス:= DBMS_PIPE.CREATE_PIPE ('message');
    DBMS_OUTPUT.PUT_LINE('CREATE_PIPEステータス: '| | ステータス);
エンド; 

NEXT_ITER_TYPE関数

この関数は、バッファ内の次のデータ項目のデータ型を返すために使用されます。

構文

DBMS_PIPE.NEXT_ITEM_TYPE() RETURN INTEGER;

戻り値

戻り値

説明

INTEGER

バッファ内の次のデータ項目のデータ型。

次の例は、バッファ内の次のデータ項目の型を取得する方法を示しています。 次の例では、2つのセッションが作成されます。 1つのセッションはパイプラインにメッセージを送信するために使用され、別のセッションはメッセージを受信するために使用される。

セッションA:

<bx id="1" type="code" text="code code=" DECLARE
str VARCHAR2 := 'Character data';
ステータスINTEGER;
開始
DBMS_PIPE.PACK_MESSAGE(str);

-- SEND_MESSAGEのステータスは: 0です。ステータス:= DBMS_PIPE.SEND_MESSAGE ('message');
DBMS_OUTPUT.PUT_LINE('SEND_MESSAGEステータスは: '| | status);
END;"id=" gis9qv "title=" "uuid=" lir6j5t3yjyjmvc1ao "data-tag=" codeblock "outputclass=" language-postgresql ""/>DECLARE
    str VARCHAR2 := 'Character data';
    ステータスINTEGER;
開始
    DBMS_PIPE.PACK_MESSAGE(str);

    -- SEND_MESSAGEのステータスは: 0です。
    ステータス:= DBMS_PIPE.SEND_MESSAGE ('message');
    DBMS_OUTPUT.PUT_LINE('SEND_MESSAGEステータスは: '| | status);
エンド; 

セッションB:

<bx id="1" type="code" text="code code=" DECLARE
str VARCHAR2;
ステータスINTEGER;
開始
ステータス:= DBMS_PIPE.RECEIVE_MESSAGE ('message');

-- RECEIVE_MESSAGEのステータスは: 0です。DBMS_OUTPUT.PUT_LINE('RECEIVE_MESSAGEステータスは: '| | status);

-- NEXT_ITEM_TYPEは: 9
ステータス:= DBMS_PIPE.NEXT_ITEM_TYPE;
DBMS_OUTPUT.PUT_LINE('NEXT_ITEM_TYPEは: '| | ステータス);

-- VARCHAR2项目は: 文字データ
DBMS_PIPE.UNPACK_MESSAGE(str);
DBMS_OUTPUT.PUT_LINE('VARCHAR2アイテムは: '| | str);
END;"id=" c9vbae "title=" "uuid=" lir6lxqswckn1mq55p "data-tag=" codeblock "outputclass=" language-postgresql ""/>DECLARE
    str VARCHAR2;
    ステータスINTEGER;
開始
    ステータス:= DBMS_PIPE.RECEIVE_MESSAGE ('message');
    
    -- RECEIVE_MESSAGEのステータスは: 0です。
    DBMS_OUTPUT.PUT_LINE('RECEIVE_MESSAGEステータスは: '| | status);
    
    -- NEXT_ITEM_TYPEは: 9
    ステータス:= DBMS_PIPE.NEXT_ITEM_TYPE;
    DBMS_OUTPUT.PUT_LINE('NEXT_ITEM_TYPEは: '| | ステータス);

    -- VARCHAR2项目は: 文字データ
    DBMS_PIPE.UNPACK_MESSAGE(str);
    DBMS_OUTPUT.PUT_LINE('VARCHAR2アイテムは: '| | str);
エンド; 

PACK_MESSAGEプロシージャ

このストアドプロシージャは、データ項目をメッセージバッファにパックするために使用される。

構文

<bx id="1" type="code" text="code id=" kmoqxc "title=" "uuid=" lir6vf3olwyyjmhr24s "code=" DBMS_PIPE.PACK_MESSAGE (
アイテムIN VARCHAR2);

DBMS_PIPE.PACK_MESSAGE (
アイテム番号);

DBMS_PIPE.PACK_MESSAGE (
アイテム日付);

DBMS_PIPE.PACK_MESSAGE_RAW (
アイテムのRAW);"data-tag=" codeblock "outputclass=" language-postgresql ""/>DBMS_PIPE.PACK_MESSAGE (
   アイテムIN VARCHAR2);

DBMS_PIPE.PACK_MESSAGE (
   アイテム番号);

DBMS_PIPE.PACK_MESSAGE (
   アイテム日付);

DBMS_PIPE.PACK_MESSAGE_RAW (
   アイテムRAW); 

Parameters

パラメーター

説明

項目

ローカルメッセージバッファにパックするデータ項目。

次の例は、このストアドプロシージャを使用してさまざまな種類のメッセージを送信する方法を示しています。

説明

この例では、メッセージの送信方法のみを示します。 メッセージの受信方法の詳細については、UNPACK_MESSAGEストアドプロシージャの例を参照してください。

<bx id="1" type="code" text="code code=" DECLARE
str VARCHAR2 := 'Character data';
num NUMBER := '1024';
ステータスINTEGER;
開始
DBMS_PIPE.PACK_MESSAGE(str);
DBMS_PIPE.PACK_MESSAGE(num);

-- メッセージを送って下さい
ステータス:= DBMS_PIPE.SEND_MESSAGE ('message');
END;"id=" ryh2yx "title=" "uuid=" lir71tkh5yszyyp3s2 "data-tag=" codeblock "outputclass=" language-postgresql ""/>DECLARE
    str VARCHAR2 := 'Character data';
    num NUMBER := '1024';
    ステータスINTEGER;
開始
    DBMS_PIPE.PACK_MESSAGE(str);
    DBMS_PIPE.PACK_MESSAGE(num);
    
    -- メッセージを送って下さい
    ステータス:= DBMS_PIPE.SEND_MESSAGE ('message');
エンド; 

UNPACK_MESSAGEプロシージャ

このストアドプロシージャは、バッファ内の次のデータ項目にアクセスするために使用される。

構文

<bx id="1" type="code" text="code code=" DBMS_PIPE.UNPACK_MESSAGE (
アイテムOUT VARCHAR2);

DBMS_PIPE.UNPACK_MESSAGE (
アイテムアウト番号);

DBMS_PIPE.UNPACK_MESSAGE (
アイテムOUT DATE);

DBMS_PIPE.UNPACK_MESSAGE_RAW (
アイテムOUT RAW);"id=" unrdoe "title=" uuid="lir6ytq0szf9baj08e" data-tag="codeblock" outputclass="language-postgresql" "/>DBMS_PIPE.UNPACK_MESSAGE (
   アイテムOUT VARCHAR2);

DBMS_PIPE.UNPACK_MESSAGE (
   アイテムアウト番号);

DBMS_PIPE.UNPACK_MESSAGE (
   アイテムOUT DATE);

DBMS_PIPE.UNPACK_MESSAGE_RAW (
   アイテムOUT RAW); 

Parameters

パラメーター

説明

項目

ローカルメッセージバッファから取得するデータ項目。

次の例は、パイプラインからメッセージを受信する方法を示しています。

<bx id="1" type="code" text="code id=" nl49te "title=" "uuid=" lir77ce8oit9ogn076b "code=" DECLARE
str VARCHAR2;
num NUMBER;
ステータスINTEGER;
開始
-- RECEIVE_MESSAGEのステータスは: 0です。ステータス:= DBMS_PIPE.RECEIVE_MESSAGE ('message');
DBMS_OUTPUT.PUT_LINE('RECEIVE_MESSAGEステータスは: '| | status);

-- VARCHAR2アイテムは: 文字データ
DBMS_PIPE.UNPACK_MESSAGE(str);
DBMS_OUTPUT.PUT_LINE('VARCHAR2アイテムは: '| | str);

-数アイテムは: 1024
DBMS_PIPE.UNPACK_MESSAGE(num);
DBMS_OUTPUT.PUT_LINE('NUMBERアイテムは: '| | num);
END;"data-tag=" codeblock "outputclass=" language-postgresql ""/>DECLARE
    str VARCHAR2;
    num NUMBER;
    ステータスINTEGER;
開始
    -- RECEIVE_MESSAGEのステータスは: 0です。  
    ステータス:= DBMS_PIPE.RECEIVE_MESSAGE ('message');
    DBMS_OUTPUT.PUT_LINE('RECEIVE_MESSAGEステータスは: '| | status);

    -- VARCHAR2アイテムは: 文字データ
    DBMS_PIPE.UNPACK_MESSAGE(str);
    DBMS_OUTPUT.PUT_LINE('VARCHAR2アイテムは: '| | str);

    -数アイテムは: 1024
    DBMS_PIPE.UNPACK_MESSAGE(num);
    DBMS_OUTPUT.PUT_LINE('NUMBERアイテムは: '| | num);
エンド; 

パージ手続き

このストアドプロシージャは、名前付きパイプラインの内容をクリーニングし、バッファから内容を受け取るために使用されます。

構文

<bx id="1" type="code" text="code id=" 8e0ydc "title=" "uuuid=" lir7dn9dpa4agcsb5ge "code=" DBMS_PIPE.PURGE ()
pipename IN VARCHAR2);"data-tag=" codeblock "outputclass=" language-postgresql ""/>DBMS_PIPE.PURGE (
   pipename IN VARCHAR2); 

Parameters

パラメーター

説明

pipename

コンテンツをクリーンアップするパイプラインの名前。

この例では、名前付きパイプラインの内容を消去する方法を示します。

CALL DBMS_PIPE.PURGE('messages');

RECEIVE_MESSAGE関数

この関数は、名前付きパイプラインからローカルバッファにメッセージをコピーするために使用されます。

構文

<bx id="1" type="code" text="code id=" d9fdtx "title=" "uuid=" lir7oatg9yqjsspou9q "code=" DBMS_PIPE.RECEIVE_MESSAGE ()
pipename IN VARCHAR2、INTEGER DEFAULT 86400のタイムアウト)
RETURN INTEGER;"data-tag=" codeblock "outputclass=" language-postgresql ""/>DBMS_PIPE.RECEIVE_MESSAGE (
   pipename IN VARCHAR2、
   INTEGER DEFAULT 86400のタイムアウト)
戻りますインテガー; 

Parameters

パラメーター

説明

pipename

メッセージをコピーするパイプラインの名前。

timeout

(オプション) メッセージを待つタイムアウト期間。 単位は秒です。 デフォルト値: 86400

戻り値

戻り値

説明

INTEGER

返されたステータスコード。

次の例は、パイプラインからバッファにメッセージをコピーする方法を示しています。

<bx id="1" type="code" text="code code=" DECLARE
varchar VARCHAR2 := 'Character data';
ステータスINTEGER;
結果VARCHAR2;
idx INTEGER;
開始
DBMS_PIPE.PACK_MESSAGE(varchar);
DBMS_PIPE.PACK_MESSAGE(varchar);
DBMS_PIPE.PACK_MESSAGE(varchar);

-- SEND_MESSAGEのステータスは: 0です。ステータス:= DBMS_PIPE.SEND_MESSAGE ('message');
DBMS_OUTPUT.PUT_LINE('SEND_MESSAGEステータスは: '| | status);

ステータス:= DBMS_PIPE.RECEIVE_MESSAGE ('message');

-- 文字データ
-- 文字データ
-- 文字データ
1 .. 3ループのidxのために
DBMS_PIPE.UNPACK_MESSAGE (結果);
DBMS_OUTPUT.PUT_LINE (結果);
エンドループ;
END;"id=" s0s3rv "title=" "uuid=" lir7v73dfkv9g4ulplr "data-tag=" codeblock "outputclass=" language-postgresql ""/>DECLARE
    varchar VARCHAR2 := 'Character data';
    ステータスINTEGER;
    結果VARCHAR2;
    idx INTEGER;
開始
    DBMS_PIPE.PACK_MESSAGE(varchar);
    DBMS_PIPE.PACK_MESSAGE(varchar);
    DBMS_PIPE.PACK_MESSAGE(varchar);
    
    -- SEND_MESSAGEのステータスは: 0です。
    ステータス:= DBMS_PIPE.SEND_MESSAGE ('message');
    DBMS_OUTPUT.PUT_LINE('SEND_MESSAGEステータスは: '| | status);
    
    ステータス:= DBMS_PIPE.RECEIVE_MESSAGE ('message');

    -- 文字データ
    -- 文字データ
    -- 文字データ
    1 .. 3ループのidxのために
      DBMS_PIPE.UNPACK_MESSAGE (結果);
      DBMS_OUTPUT.PUT_LINE(result);
    エンドループ;
エンド; 

REMOVE_PIPE関数

この関数は、名前付きパイプラインを削除するために使用されます。

構文

<bx id="1" type="code" text="code id=" n8tubg "title=" "uuuid=" lir7wp93y128myirha "code=" DBMS_PIPE.REMOVE_PIPE (
pipename IN VARCHAR2)
RETURN INTEGER;"data-tag=" codeblock "outputclass=" language-postgresql ""/>DBMS_PIPE.REMOVE_PIPE (
   pipename IN VARCHAR2)
戻りますインテガー; 

Parameters

パラメーター

説明

pipename

削除するパイプラインの名前。

戻り値

戻り値

説明

INTEGER

返されたステータスコード。

次の例は、名前付きパイプラインを削除する方法を示しています。

<bx id="1" type="code" text="code id=" ywlcpz "title=" "uuuid=" lir7zg5ky58aiohjh3 "code=" SELECT DBMS_PIPE.REMOVE_PIPE('メッセージ') DUALから;
remove_pipe
-------------
0
(1行) "data-tag=" codeblock "outputclass=" language-postgresql ""/>SELECT DBMS_PIPE.REMOVE_PIPE('messages ') DUAL;
 remove_pipe
-------------
           0
(1行) 

RESET_BUFFERプロシージャ

このストアドプロシージャは、メッセージが送信される前にメッセージが格納されるバッファの内容を消去するために使用される。

構文

DBMS_PIPE.RESET_BUFFER;

次の例は、ローカルバッファの内容を消去する方法を示しています。

コールDBMS_PIPE.RESET_BUFFER;

SEND_MESSAGE関数

この関数は、名前付きパイプラインにメッセージを送信するために使用されます。

構文

<bx id="1" type="code" text="code id=" 0c6edg "title=" "uuuid=" lir87i4jn26ko6q7j08 "code=" DBMS_PIPE.SEND_MESSAGE (
pipename IN VARCHAR2、INTEGER DEFAULT 86400のタイムアウト、INTEGER DEFAULT 8192のmaxpipesize)
RETURN INTEGER;"data-tag=" codeblock "outputclass=" language-postgresql ""/>DBMS_PIPE.SEND_MESSAGE (
    pipename IN VARCHAR2、
    INTEGER DEFAULT 86400のタイムアウト、
    INTEGER DEFAULT 8192のmaxpipesize)
  戻りますインテガー; 

Parameters

パラメーター

説明

pipename

パイプライン名。

timeout

(オプション) 待機期間。 単位は秒です。 デフォルト値: 86400

maxpipesize

(オプション) パイプラインの最大容量 (バイト単位) 。 デフォルト値は 8192 です。

戻り値

戻り値

説明

INTEGER

返されたステータスコード。

次に、ローカルデータをパイプラインに送信する例を示します。

<bx id="1" type="code" text="code id=" l64kkr "title=" "uuid=" lir8bql6xzdvi0l92sl "code=" DECLARE
varchar VARCHAR2 := 'Character data';
ステータスINTEGER;
結果VARCHAR2;
idx INTEGER;
開始
DBMS_PIPE.PACK_MESSAGE(varchar);
DBMS_PIPE.PACK_MESSAGE(varchar);
DBMS_PIPE.PACK_MESSAGE(varchar);

-- SEND_MESSAGEのステータスは: 0です。ステータス:= DBMS_PIPE.SEND_MESSAGE ('message');
DBMS_OUTPUT.PUT_LINE('SEND_MESSAGEステータスは: '| | status);

ステータス:= DBMS_PIPE.RECEIVE_MESSAGE ('message');

-- 文字データ
-- 文字データ
-- 文字データ
1 .. 3ループのidxのために
DBMS_PIPE.UNPACK_MESSAGE (結果);
DBMS_OUTPUT.PUT_LINE (結果);
エンドループ;
END;"data-tag=" codeblock "outputclass=" language-postgresql ""/>DECLARE
    varchar VARCHAR2 := 'Character data';
    ステータスINTEGER;
    結果VARCHAR2;
    idx INTEGER;
開始
    DBMS_PIPE.PACK_MESSAGE(varchar);
    DBMS_PIPE.PACK_MESSAGE(varchar);
    DBMS_PIPE.PACK_MESSAGE(varchar);
    
    -- SEND_MESSAGEのステータスは: 0です。
    ステータス:= DBMS_PIPE.SEND_MESSAGE ('message');
    DBMS_OUTPUT.PUT_LINE('SEND_MESSAGEステータスは: '| | status);
    
    ステータス:= DBMS_PIPE.RECEIVE_MESSAGE ('message');

    -- 文字データ
    -- 文字データ
    -- 文字データ
    1 .. 3ループのidxのために
      DBMS_PIPE.UNPACK_MESSAGE (結果);
      DBMS_OUTPUT.PUT_LINE(result);
    エンドループ;
エンド; 

UNIQUE_SESSION_NAME関数

この関数は、現在のセッションの一意の名前を返すために使用されます。

構文

<bx id="1" type="code" text="code id=" frggri "title=" "uuid=" lir7kkxnkhusttaz58q "code=" DBMS_PIPE.UNIQUE_SESSION_NAME
RETURN VARCHAR2;"data-tag=" codeblock "outputclass=" language-postgresql ""/>DBMS_PIPE.UNIQUE_SESSION_NAME 
  戻りVARCHAR2; 

戻り値

戻り値

説明

VARCHAR2

現在のセッションの一意の名前。

次の例は、現在のセッションの一意の名前を取得する方法を示しています。

<bx id="1" type="code" text="code id=" 1hbdtw "title=" "uuid=" lir7lwgmepkmwf3qq4q "code=" SELECT DBMS_PIPE.UNIQUE_SESSION_NAME() デュアルから;
unique_session_name
-----------------------
POLARDB $パイプ $12$57884
(1行) "data-tag=" codeblock "outputclass=" language-postgresql ""/>SELECT DBMS_PIPE.UNIQUE_SESSION_NAME() FROM dual;
  unique_session_name
-----------------------
 POLARDB $パイプ $12$57884
(1行)