B UTL_RAWパッケージ
Oracle Visual Workbenchを使用して、ゲートウェイを介してWebSphere MQにアクセスするアプリケーションを開発します。 Oracle Visual Workbenchは、Oracle WebSphere MQにアクセスするインタフェースを定義し、OracleアプリケーションがゲートウェイとインタフェースするためのPL/SQLコード(MIP)を自動的に生成します。 Oracle Visual Workbenchの詳細は、「Oracle Procedural Gateway Visual Workbench for WebSphere MQインストレーションおよびユーザー・ガイドfor Microsoft Windows (32ビット)」を参照してください。
B.1 メッセージのデータ型
WebSphere MQキューに送信またはWebSphere MQキューから取得するメッセージは、MIPプロシージャにより定義されないデータとして転送されます。
データ・プロファイルがMIPで定義されると、MIPはメッセージ・データをOracleデータ型から受信側アプリケーションが理解できるターゲット・データ型に変換します。 メッセージ・データは、WebSphere MQキューに送信される前に、RAW
データ型のバッファにパックされます。 同様の変換プロセスが、メッセージの受信時に適用されます。 MIPはメッセージをバッファから解凍し、指定されたOracleデータ型に変換します。
MIPは、UTL_RAW
パッケージの関数を使用して、メッセージ・データ変換を実行します。 UTL_RAW
パッケージは、RAW
データ型およびPL/SQLデータ型を使用してWebSphere MQキューを介して送受信されるメッセージ・データを変換および圧縮するためのプロシージャを含むPL/SQLパッケージです。
必要に応じて、生成されたMIPのメッセージ・データ変換をUTL_RAW
関数で拡張できます。 MIPにデータ・プロファイルが定義されていない場合は、UTL_RAW
関数を使用して独自のデータ変換プロシージャを作成し、メッセージを送信する前に、およびメッセージを受信した直後にこれらの関数をコールできます。
UTL_RAW
パッケージはゲートウェイには含まれません。 これは、各Oracleデータベースとともに出荷されます。 UTL_RAW
パッケージのインストールの詳細は、Oracle DBAを参照してください。
B.2 UTL_RAW関数
このトピックでは、UTL_RAW
関数について説明します。
UTL_RAW.function(arg1, arg2, ...)
ファンクション名、引数、そのOracleデータ型および戻り値データ型は、各ファンクションの説明とともにこの付録で説明されます。 それぞれの説明で、ファンクションは、次の変数に置かれる結果のファンクション値を示すPL/SQL構文とともに説明されます。
result := UTL_RAW.function(arg1, arg2, ...);
ただし、ファンクションは、PL/SQL式内のコンポーネントとしても使用できます。 たとえば、この関数は、「こんにちは」および「世界!」という2つの文字列を、 UTL_RAW
.CAST_TO_RAW
を使用してRAWメッセージ・データに変換し、それらを UTL_RAW
.CONCAT
と連結し、ゲートウェイを使用してWebSphere MQキューに送信します。 同じメッセージがキューから取得され、 UTL_RAW.CAST_TO_VARCHAR2
で文字データ型に変換されてから出力されます。
B.2.1 UTL_RAW.TO_RAW
PGM_UTL.TO_RAW
は、PGM.MQOD
, PGM.MQMD
, PGM.MQPMO
およびPGM.MQGMO
オブジェクトの値をRAW値に変換します。
構文
result := PGM_UTL.TO_RAW(input
);
説明:
-
resultは、ファンクションの出力値を保持する変数です。 これは、データ型RAWです。
-
「入力」は、
PGM
.MQOD
、PGM
.MQMD
、PGM
.MQPMO
またはPGM
.MQGMO
データ型オブジェクトの入力値です。RAWデータに変換されます。
B.2.2 UTL_RAW.BIT_AND
UTL_RAW.BIT_AND
は、2つのRAW値に対してビット単位の論理AND
操作を実行します。 値の長さが異なる場合、AND
操作は、2つの値のうち最も短いバイトの最後のバイトの後に終了します。 長い値の未処理の部分は、最終結果を得るために部分結果に追加されます。 結果値の長さは、2つの入力値の長い方と同等です。
構文
result := UTL_RAW.BIT_AND(input1, input2);
説明:
-
resultは、ファンクションの出力値を保持する変数です。 これは、データ型RAWです。
input1
またはinput2
がnullの場合、値はnullです。 -
input1は、データ型
RAW
からBIT_AND
へのinput2
の入力値です。 -
input2は、データ型
RAW
からBIT_AND
へのinput1
の入力値です。
B.2.4 UTL_RAW.BIT_OR
UTL_RAW.BIT_OR
は、2つのRAW値のビット単位の論理OR
操作を実行します。 値の長さが異なる場合、OR
操作は、2つの値のうち最も短いバイトの最後のバイトの後に終了します。 長い値の未処理の部分は、最終結果を得るために部分結果に追加されます。 結果値の長さは、2つの入力値の長い方と同等です。
構文
result := UTL_RAW.BIT_OR(input1, input2);
説明:
-
result
は、関数の出力値を保持する変数です。 データ型はRAW
です。input1
またはinput2
がnullの場合、値はnullです。 -
input1
は、input2
を使用したRAW
データ型からBIT_OR
への入力値です。 -
input2
は、input1
を使用したRAW
データ型からBIT_OR
への入力値です。
B.2.5 UTL_RAW.BIT_XOR
UTL_RAW
。BIT_XOR
は、2つのRAW値のビット単位の論理EXCLUSIVE
OR
操作を実行します。 値の長さが異なる場合、EXCLUSIVE
OR
操作は、2つの値の短いバイトの最後のバイトの後に終了します。 長い値の未処理の部分は、最終結果を得るために部分結果に追加されます。 結果値の長さは、2つの入力値の長い方と同等です。
構文
result := UTL_RAW.BIT_XOR(input1, input2);
説明:
-
result
は、関数の出力値を保持する変数です。 データ型はRAW
です。input1
またはinput2
がnullの場合、値はnullです。 -
input1
は、input2
を使用したEXCLUSIVE
OR
へのRAW
データ型の入力値です。 -
input2
は、input1
を使用したEXCLUSIVE
OR
へのRAW
データ型の入力値です。
B.2.7 UTL_RAW.CAST_TO_VARCHAR2
UTL_RAW
。CAST_TO_VARCHAR2
は、RAW値を、同じ数のデータ・バイトを持つデータ型VARCHAR2
の値に変換します。 結果は、文字ではなく、シングルバイト8ビットの構成として処理されます。 マルチバイト文字境界は無視されます。 データは変更されず、データ型VARCHAR2
にのみ変更されます。
構文
result := UTL_RAW.CAST_TO_VARCHAR2(input);
説明:
-
result
は、関数の出力値を保持する変数です。 データ型はVARCHAR2
です。input
がnullの場合、値はnullです。 -
input
は、データ型VARCHAR2
に変換するRAW
データ型の入力値です。
B.2.8 UTL_RAW.COMPARE
UTL_RAW
。COMPARE
は、あるRAW値と別のRAW値を比較します。 同一の場合、UTL_RAW
。COMPARE
は0を返します。 同じでない場合、COMPARE
は、一致しない最初のバイトの位置を返します。 入力値の長さが異なる場合、指定する値により短い方の入力値が右側に埋め込まれます。
構文
result := UTL_RAW.COMPARE(input1, input2[, pad]);
説明:
-
result
は、関数の出力値を保持する変数です。 データ型はNUMBER
です。input1
およびinput2
の値がnullまたは同一の場合、または最初の不一致バイトの1から番号付けされた位置の場合、0の値が返されます。 -
input1
は、比較するRAW
データ型の最初の入力値です。 -
input2
は、比較するRAW
データ型の2番目の入力値です。 -
padis
短い入力値のパディングに使用される単一バイト値。 デフォルトは、X'00'です。
B.2.9 UTL_RAW.CONCAT
UTL_RAW
。CONCAT
は、最大12個のRAW値のセットを1つのRAW値に連結します。 値は、左から右へパラメータ・リストに表示される順序で、まとめて追加されます。 NULL入力値はスキップされ、連結は次のNULLではない値で操作を継続します。
入力値の長さの合計が32 767バイトを超えると、VALUE_ERROR
例外が発生します。
構文
result := UTL_RAW.CONCAT(input1, ... input12);
説明:
-
result
は、関数の出力値を保持する変数です。 データ型はRAW
です。 -
input1
...
input12
は、連結するRAW
データ型の入力値です。
B.2.10 UTL_RAW.CONVERT
UTL_RAW
。CONVERT
は、RAW値を別の文字セットに変換します。A
VALUE_ERROR
例外は、次のいずれかの条件で発生します:
-
入力値が、NULLであるまたは長さが0である。
-
指定された文字セットの1つまたは両方が、欠落している、NULLであるまたは長さが0である。
-
文字セット名が無効であるまたはOracleデータベースでサポートされていない。
構文
result := UTL_RAW.CONVERT(input,new_charset
,old_charset
);
説明:
-
result
は、関数の出力値を保持する変数です。RAW
データ型です。 -
input
は、変換するRAW
データ型の入力値です。 -
new_charset
は、input
を変換するグローバリゼーション・サポート文字セットです。 -
old_charset
は、入力が現在使用しているグローバリゼーション・サポート文字セットです。
B.2.13 UTL_RAW.OVERLAY
UTL_RAW
。OVERLAY
は、RAW値の一部をRAWデータの新しい文字列に置き換えます。 新規データがオーバーレイ領域の長さより短い場合、十分な長さにするために新規データは埋め込まれます。 新規データがオーバーレイ領域より長い場合、余分なバイトは無視されます。 入力値を超えるオーバーレイ領域を指定すると、指定された長さに従い、入力値が拡張されます。 入力値の長さを超えるオーバーレイ領域の開始位置を指定すると、入力値が指定された位置に埋め込まれ、入力値が新規データで拡張されます。
A
VALUE_ERROR
例外は、次のいずれかの条件で発生します:
-
入力値のオーバーレイに使用される新規データが、NULLであるまたは長さが0である。
-
オーバーレイする入力値の位置が定義されていない。
-
オーバーレイする部分の長さが、32767バイトを超えている。
-
オーバーレイするバイト数が、0より小さく定義される。
-
オーバーレイ操作を開始する入力値内の位置の定義が、1より小さい。
構文
result := UTL_RAW.OVERLAY(new_bytes
, input, position, length, pad);
説明:
-
result
は、関数の出力値を保持する変数です。RAW
データ型です。 -
new_bytes
は、入力をオーバーレイする新しい値(RAW
データ型のバイト文字列)です。 バイトは、左端のバイトで始まるnew_bytes
から選択されます。 -
input
は、オーバーレイするデータ型RAW
の入力値です。 -
position
は、オーバーレイを開始する1から番号が付けられた入力内の位置です。 この値は、0より大きい必要があります。 デフォルトは1です。 -
length
は、オーバーレイするバイト数です。 この値は、0より大きいか等しい必要があります。 デフォルトは、new_bytes
の長さです。 -
pad
は、長さがオーバーレイの長さを超えた場合、または位置がinput
の長さを超えた場合にパディングするために使用される1バイト値です。 デフォルトは、X'00'です。
B.2.15 UTL_RAW.SUBSTR
UTL_RAW
。SUBSTR
は、RAW値からバイトを削除します。 削除するバイトの開始点としてポジティブ数値を指定した場合、SUBSTR
は入力値の先頭からカウントされ、最初のバイトが検索されます。 負の数を指定した場合、UTL_RAW
。SUBSTR
は、入力値の末尾から逆方向にカウントして最初のバイトを検索します。
A
VALUE_ERROR
例外は、次のいずれかの条件で発生します:
-
削除を開始する位置が、0で指定される。
-
削除するバイト数が、0より小さく指定される。
構文
result := UTL_RAW.SUBSTR(input, position[,length]);
説明:
-
result
は、関数の出力値を保持する変数です。RAW
データ型です。 値は、input
から指定されたバイトまたはバイトです。input
がnullの場合、値はnull値です。 -
input
は、そのバイトの一部を抽出するRAW
データ型の入力値です。 -
position
は、抽出を開始するバイト位置です。 この値は、0にはできません。position
の値が負の場合、SUBSTR
は入力の最後から逆方向にカウントされます。 -
length
は、position
の後にinput
から抽出するバイト数です。 この値は、0より大きい必要があります。 指定されない場合、入力の終わりのすべてのバイトが戻されます。
B.2.16 UTL_RAW.TRANSLATE
UTL_RAW
。TRANSLATE
は、指定したスキームに従って、RAW値の一部のバイトの値を変更します。 入力値内のバイトが一致する文字列と比較され、一致する場合、置換文字列内の同じ位置のバイトが結果にコピーされます。 オフセットが置換文字列の長さを超える場合、これは結果から省略されます。 一致する文字列に表示されない入力値のバイトは、結果値にコピーされます。 一致する文字列内の左端の発生のみが使用され、後続の重複する発生は無視されます。
一致する文字列に含まれるバイトが、置換文字列より多い場合、一致する文字列の終わりの余分なバイトには置換文字列内に対応するバイトがありません。 このバイトに一致する入力値内のバイトは、結果値から省略されます。
A
VALUE_ERROR
例外は、次のいずれかの条件で発生します:
-
入力値が、NULLであるか長さが0である。
-
一致する文字列が、NULLであるか長さが0である。
-
置換文字列が、NULLであるか長さが0である。
構文
result := UTL_RAW.TRANSLATE(input, match, replace_bytes);
説明:
-
result
は、関数の出力値を保持する変数です。 データ型はRAW
です。 -
input
は、変更するデータ型RAW
の入力値です。 -
match
は、input
で検索し、replace_bytes
に変更するバイト0コードを指定します。 データ型はRAW
です。 -
replace_bytes
は、matchで指定されたコードを置換するバイト・コードを指定します。 データ型はRAW
です。
B.2.17 UTL_RAW.TRANSLITERATE
UTL_RAW
。TRANSLITERATE
は、一致する文字列内のすべてのバイトを、置換文字列の対応するバイトで置換します。 入力値内のバイトが一致する文字列と比較され、見つからない場合、バイトは変更されずに結果値にコピーされます。 見つかった場合、置換文字列内の同一のオフセットのバイトによる結果値に置換されるか、オフセットが置換文字列の長さを超える場合、指定する埋込みバイトに置換されます。 一致する文字列のバイトの文字列内の左端の発生のみが使用されます。 後続の重複する発生は無視されます。 UTL_RAW
の結果値。TRANSLITERATE
は常に入力パラメータと同じ長さです。
置換文字列が一致する文字列より短いと、選択された一致する文字列バイトに置換文字列内に対応するバイトがない場合、埋込みバイトは結果値に置かれます。 入力値がNULLまたは長さが0の場合、A VALUE_ERROR例外が発生します。
UTL_RAW
.TRANSLITERATE
は、次の点でUTL_RAW
.TRANSLATE
と異なります:
-
置換文字列で定義されていない入力値のバイトが、指定する値で埋め込まれる。
-
結果値は、常に、入力値の長さと同じである。
構文
result := UTL_RAW.TRANSLITERATE (input, replace_bytes, match, pad);
説明:
-
Result
は、関数の出力値です。 データ型はRAW
です。 -
Input
は、変更するデータ型RAW
の入力値です。 -
Replace_bytes
は、対応する一致バイトが変更されるバイト・コードを指定します。 この値は、RAWデータ型のいずれかの有効な長さです。 デフォルトはNULL値で、必要に応じ、matchの長さまでの埋込みで有効に拡張します。 -
Match
は、input
で照合するbyte
コードを指定します。 この値は、RAWデータ型のいずれかの有効な長さです。 デフォルト値は、X'00'からX'FF'です。 -
Pad
は、replace_bytes
が一致より短い場合にreplace_bytes
の長さを拡張するために使用される単一バイト値です。 デフォルトは、X'00'です。UTL_RAW
.TRANSLATE
は、UTL_RAW
.TRANSLITERATE
関数と次の点で異なります:-
一致および置換文字列で使用されるRAW値に、デフォルト値がない。
-
置換文字列で定義されていない入力値のバイトが、結果値で省略される。
-
結果値が、入力値より短いことがある。
-
B.2.18 UTL_RAW.XRANGE
UTL_RAW
.XRANGE
は、指定した範囲内のすべての有効な1バイト・コードを含むRAW値を返します。 開始バイト値が、終了バイト値よりも大きい場合、結果バイトの連続は開始バイトから始まり、X'FF'からX'00'を折り返して終了バイトで終わります。
指定する場合、開始および終了バイトの値は、シングルバイトRAW値である必要があります。
構文
result := UTL_RAW.XRANGE(start, end
);
説明:
-
result
は、関数の出力値です。 これは、データ型RAWです。 -
start
は、開始するシングル・バイト・コードです。 デフォルトは、X'00'です。 -
end
は、終了するシングル・バイト・コードです。 デフォルトは、X'FF'です。