RESET_BUFFER プロシージャー - ローカル・メッセージ・バッファーをリセットする

RESET_BUFFER プロシージャーは、セッションのローカル・メッセージ・バッファーへのポインターを バッファーの先頭にリセットします。 バッファーをリセットすることに よって、RESET_BUFFER 呼び出しより前にメッセージ・バッファーに存在していたあらゆる データ項目が、以降の PACK_MESSAGE 呼び出しによって、上書きされます。

構文

構文図を読む構文図をスキップするDBMS_PIPE.RESET_BUFFER

許可

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

proc1 では、PACK_MESSAGE 関数を使用して、Sujata という名前の従業員に関するメッセージを ローカル・メッセージ・バッファーに書き込みます。 RESET_BUFFER プロシージャーを呼び出して、このメッセージを Bing に関するメッセージで置き換え、パイプに送信します。 proc2 では、Bing に対するメッセージを受信して解凍します。


SET SERVEROUTPUT ON@ 

CREATE PROCEDURE proc1()
BEGIN
  DECLARE    v_status        INTEGER;
  DECLARE    status          INTEGER;
  SET status = DBMS_PIPE.PACK_MESSAGE('Hi, Sujata');
  SET status = DBMS_PIPE.PACK_MESSAGE('Can you attend a meeting at 3:00, today?');
  SET status = DBMS_PIPE.PACK_MESSAGE('If not, is tomorrow at 8:30 ok with you?');
  CALL DBMS_PIPE.RESET_BUFFER;
  SET status = DBMS_PIPE.PACK_MESSAGE('Hi, Bing');
  SET status = DBMS_PIPE.PACK_MESSAGE('Can you attend a meeting at 9:30, tomorrow?');
  SET v_status = DBMS_PIPE.SEND_MESSAGE('pipe');
  CALL DBMS_OUTPUT.PUT_LINE('SEND_MESSAGE status: ' || v_status);
END@

CREATE PROCEDURE proc2()
BEGIN
  DECLARE    v_item          VARCHAR(80);
  DECLARE    v_status        INTEGER;
  SET v_status = DBMS_PIPE.RECEIVE_MESSAGE('pipe',1);
  CALL DBMS_OUTPUT.PUT_LINE('RECEIVE_MESSAGE status: ' || v_status);
  CALL DBMS_PIPE.UNPACK_MESSAGE_CHAR(v_item);
  CALL DBMS_OUTPUT.PUT_LINE('Item: ' || v_item);
  CALL DBMS_PIPE.UNPACK_MESSAGE(v_item);
  CALL DBMS_OUTPUT.PUT_LINE('Item: ' || v_item);
END@

CALL proc1@

CALL proc2@

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

proc1 から

SEND_MESSAGE status: 0

proc2 から

RECEIVE_MESSAGE status: 0
Item: Hi, Bing
Item: Can you attend a meeting at 9:30, tomorrow?