UNPACK_MESSAGE プロシージャー - データ項目をローカル・メッセージ・バッファーから取得する

UNPACK_MESSAGE プロシージャーは、メッセージから次のデータ項目を取得し、変数に割り当て ます。

UNPACK_MESSAGE プロシージャーの 1 つを呼び出す前に、RECEIVE_MESSAGE プロシージャーを使用して、メッセージをローカル・メッセージ・バッファーに配置します。

構文

構文図を読む構文図をスキップするDBMS_PIPE.UNPACK_MESSAGE_NUMBER(item )
構文図を読む構文図をスキップするDBMS_PIPE.UNPACK_MESSAGE_CHAR (item)
構文図を読む構文図をスキップするDBMS_PIPE.UNPACK_MESSAGE_DATE(item )
構文図を読む構文図をスキップするDBMS_PIPE.UNPACK_MESSAGE_RAW (item)

プロシージャー・パラメーター

item
データ項目をローカル・メッセージ・バッファーから受信するための変数を指定する、 以下のいずれかのタイプの出力引数。
ルーチン データ・タイプ
UNPACK_MESSAGE_NUMBER DECFLOAT
UNPACK_MESSAGE_CHAR VARCHAR(4096)
UNPACK_MESSAGE_DATE DATE
UNPACK_MESSAGE_RAW BLOB(4096)

許可

DBMS_PIPE モジュールに対する EXECUTE 特権。

proc1 で、メッセージを圧縮して送信します。 proc2 では、メッセージを受信し、項目のタイプに基づいて 適切なプロシージャーを使用することによって解凍し、メッセージを標準出力に表示します。

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