組み込み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 | (オプション) プライベートパイプラインを作成するかどうかを指定します。 有効な値:
|
戻り値
戻り値 | 説明 |
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行)