DB2 V10.1 for Linux, UNIX, and Windows

RECEIVE_MESSAGE 函数 - 从指定管道获取消息

RECEIVE_MESSAGE 函数从指定管道获取消息。

语法

阅读语法图跳过直观语法图
>>-DBMS_PIPE.RECEIVE_MESSAGE--(--pipename --+------------+--)--><
                                            '-,--timeout-'      

返回值

RECEIVE_MESSAGE 函数返回类型为 INTEGER 的下列状态码之一。
表 1. RECEIVE_MESSAGE 状态码
状态码 描述
0 成功
1 超时

函数参数

pipename
类型为 VARCHAR(128) 的输入参数,用于指定管道的名称。如果指定的管道不存在,那么会隐式创建该管道。有关管道的更多信息,请参阅DBMS_PIPE 模块
timeout
类型为 INTEGER 的可选输入参数,用于指定等待时间(以秒计)。缺省值为 86400000 秒(1000 天)。

授权

对 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