NEXT_ITEM_TYPE 関数 - 次の項目のデータ・タイプ・コードを戻す

NEXT_ITEM_TYPE 関数は、受信されたメッセージの次のデータ項目のデータ・タイプを識別する整数コードを戻します。

受信されたメッセージは、セッションのローカル・メッセージ・バッファーに保管されます。 UNPACK_MESSAGE プロシージャーを使用して、 ローカル・メッセージ・バッファーから各項目を移動させ、次に NEXT_ITEM_TYPE 関数を使用して、 次に使用可能な項目のデータ・タイプ・コードを戻します。 メッセージに項目が残っていない 場合は、コード 0 が戻されます。

構文

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

戻り値

この関数は、データ・タイプを表す以下のコードの 1 つを戻します。
表 1. NEXT_ITEM_TYPE データ・タイプ・コード
タイプ・コード データ・タイプ
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