SEND_MESSAGE プロシージャー - メッセージを指定されたパイプに送信する

SEND_MESSAGE プロシージャーは、メッセージをセッションのローカル・メッセージ・バッファー から、指定されたパイプに送信します。

構文

構文図を読む構文図をスキップするDBMS_PIPE.SEND_MESSAGE (pipename,timeout,maxpipesize)

戻り値

このプロシージャーは、タイプ INTEGER の以下の状況コードの 1 つを戻します。
表 1. SEND_MESSAGE 状況コード
状況コード 説明
0 成功
1 タイムアウト

プロシージャー・パラメーター

pipename
パイプの名前を指定する、タイプ VARCHAR (128) の入力引数。 指定されたパイプが存在しない場合は、パイプが暗黙的に 作成されます。 パイプについて詳しくは、DBMS_PIPE モジュールを参照してください。
timeout
待ち時間を秒単位で指定する、タイプ INTEGER のオプション入力引数。 デフォルトは 86400000 (1000 日) です。
maxpipesize
パイプの最大容量をバイト単位で指定する、タイプ INTEGER のオプション入力引数。 デフォルトは 8192 バイトです。

許可

DBMS_PIPE モジュールに対する EXECUTE 特権。

proc1 では、 メッセージを送信します。 proc2 では、メッセージを受信して解凍します。 メッセージが 1 秒以内に 受信されない場合は、タイムアウトになります。

SET SERVEROUTPUT ON@ 

CREATE PROCEDURE proc1()
BEGIN
  DECLARE status INTEGER;
  SET status = DBMS_PIPE.CREATE_PIPE( 'pipe1' );
  SET status = DBMS_PIPE.PACK_MESSAGE('message1');
  SET status = DBMS_PIPE.SEND_MESSAGE( 'pipe1' );
END@

CREATE PROCEDURE proc2()
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);
  CALL DBMS_PIPE.UNPACK_MESSAGE(v_item);
  CALL DBMS_OUTPUT.PUT_LINE('Item: ' || v_item);
END@

CALL proc1@
CALL proc2@

この例では、以下の出力が結果として戻ります。

RECEIVE_MESSAGE status: 0
Item: message1