UNPACK_MESSAGE プロシージャー - データ項目をローカル・メッセージ・バッファーから取得する
UNPACK_MESSAGE プロシージャーは、メッセージから次のデータ項目を取得し、変数に割り当て ます。
UNPACK_MESSAGE プロシージャーの 1 つを呼び出す前に、RECEIVE_MESSAGE プロシージャーを使用して、メッセージをローカル・メッセージ・バッファーに配置します。
構文
プロシージャー・パラメーター
- 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