RESET_BUFFER 过程 - 重置本地消息缓冲区

RESET_BUFFER 过程将会话的本地消息缓冲区的指针重置回至缓冲区的开头。重置缓冲区会导致后续 PACK_MESSAGE 调用覆盖消息缓冲区中,在 RESET_BUFFER 调用之前已存在的任何数据项。

语法

阅读语法图跳过直观语法图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?