NEXT_ITEM_TYPE 函数 - 返回下一项的数据类型代码
NEXT_ITEM_TYPE 函数返回整数代码,该代码标识所接收消息中下一数据项的数据类型。
所接收消息存储在会话的本地消息缓冲区中。使用 UNPACK_MESSAGE
过程将每一项移出本地消息缓冲区,然后使用 NEXT_ITEM_TYPE
函数返回下一可用项的数据类型代码。如果消息中没有其他代码剩余,那么会返回代码 0。
语法
返回值
此函数返回下列表示数据类型的代码。
| 类型代码 | 数据类型 |
|---|---|
| 0 | 没有其他数据项 |
| 6 | INTEGER |
| 9 | VARCHAR |
| 12 | DATE |
| 23 | BLOB |
权限
对 DBMS_PIPE 模块的 EXECUTE 特权。
示例
在 proc1 中,将消息打包并发送。在 proc2 中,接收该消息,然后通过使用 NEXT_ITEM_TYPE 函数确定该消息的类型来对其解压缩。
SET SERVEROUTPUT ON@
CREATE PROCEDURE proc1()
BEGIN
DECLARE status INT;
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 status INT;
DECLARE num1 DECFLOAT;
DECLARE date1 DATE;
DECLARE raw1 BLOB(100);
DECLARE varchar1 VARCHAR(100);
DECLARE itemType INTEGER;
SET status = DBMS_PIPE.RECEIVE_MESSAGE( 'pipe1' );
IF( status = 0 ) THEN
SET itemType = DBMS_PIPE.NEXT_ITEM_TYPE();
CASE itemType
WHEN 6 THEN
CALL DBMS_PIPE.UNPACK_MESSAGE_NUMBER( num1 );
CALL DBMS_OUTPUT.PUT_LINE( 'num1: ' || num1 );
WHEN 9 THEN
CALL DBMS_PIPE.UNPACK_MESSAGE_CHAR( varchar1 );
CALL DBMS_OUTPUT.PUT_LINE( 'varchar1: ' || varchar1 );
WHEN 12 THEN
CALL DBMS_PIPE.UNPACK_MESSAGE_DATE( date1 );
CALL DBMS_OUTPUT.PUT_LINE( 'date1:' || date1 );
WHEN 23 THEN
CALL DBMS_PIPE.UNPACK_MESSAGE_RAW( raw1 );
CALL DBMS_OUTPUT.PUT_LINE( 'raw1: ' || VARCHAR(raw1) );
ELSE
CALL DBMS_OUTPUT.PUT_LINE( 'Unexpected value' );
END CASE;
END IF;
SET status = DBMS_PIPE.REMOVE_PIPE( 'pipe1' );
END@
CALL proc1@
CALL proc2@
此示例生成以下输出:
varchar1: message1