NEXT_ITEM_TYPE 関数 - 次の項目のデータ・タイプ・コードを戻す
NEXT_ITEM_TYPE 関数は、受信されたメッセージの次のデータ項目のデータ・タイプを識別する整数コードを戻します。
受信されたメッセージは、セッションのローカル・メッセージ・バッファーに保管されます。 UNPACK_MESSAGE プロシージャーを使用して、
ローカル・メッセージ・バッファーから各項目を移動させ、次に NEXT_ITEM_TYPE 関数を使用して、
次に使用可能な項目のデータ・タイプ・コードを戻します。 メッセージに項目が残っていない
場合は、コード 0 が戻されます。
構文
戻り値
この関数は、データ・タイプを表す以下のコードの 1 つを戻します。
| タイプ・コード | データ・タイプ |
|---|---|
| 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