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 Installation and User's Guide for Microsoft Windows (32-Bit)』を参照してください。この付録の内容は次のとおりです。
WebSphere MQキューに送信またはWebSphere MQキューから取得するメッセージは、MIPプロシージャにより定義されないデータとして転送されます。データ・プロファイルがMIPで定義されると、MIPはメッセージ・データをOracleデータ型から受信側アプリケーションが理解できるターゲット・データ型に変換します。メッセージ・データは、WebSphere MQキューに送信される前に、RAW
データ型のバッファに圧縮されます。同様の変換プロセスが、メッセージの受信時に適用されます。MIPはメッセージをバッファから解凍し、指定されたOracleデータ型に変換します。
MIPは、UTL_RAW
パッケージのファンクションを使用して、メッセージ・データ変換を実行します。UTL_RAW
パッケージはPL/SQLパッケージで、これには、WebSphere MQキューを介して送受信されるメッセージ・データを、RAW
データ型およびPL/SQLデータ型を使用して変換および圧縮するプロシージャが含まれています。
必要に応じ、UTL_RAW
ファンクションを使用して、生成済MIPのメッセージ・データ変換を拡張できます。データ・プロファイルがMIPで定義されていない場合、UTL_RAW
ファンクションを使用する独自の変換プロシージャを作成し、メッセージの送信およびメッセージの受信直後に、これらの機能をコールできます。
UTL_RAW
パッケージは、ゲートウェイに含まれません。これは、各Oracleデータベースとともに出荷されます。UTL_RAW
パッケージの詳細は、使用するOracle DBAを参照してください。
UTL_RAW.function(arg1, arg2, ...)
ファンクション名、引数、そのOracleデータ型および戻り値データ型は、各ファンクションの説明とともにこの付録で説明されます。それぞれの説明で、ファンクションは、次の変数に置かれる結果のファンクション値を示すPL/SQL構文とともに説明されます。
result := UTL_RAW.function(arg1, arg2, ...);
ただし、ファンクションは、PL/SQL式内のコンポーネントとしても使用できます。 たとえば、ファンクションは、2つの文字列、Helloおよびworld!を対象に、UTL_RAW
.CAST_TO_RAW
を使用してそれらをRAWメッセージ・データに変換してからUTL_RAW
.CONCAT
と連結させ、ゲートウェイを使用してWebSphere MQキューに送信します。同一のメッセージがキューから取得されてからUTL_RAW.CAST_TO_VARCHAR2
で文字データ型に変換され、表示されます。
PGM_UTL.TO_RAW
は、PGM.MQOD
、PGM.MQMD
、PGM.MQPMO
およびPGM.MQGMO
オブジェクトの値をRAW値に変換します。
構文
result := PGM_UTL.TO_RAW(input
);
説明:
resultは、ファンクションの出力値を保持する変数です。これは、データ型RAWです。
inputは、ロー・データに変換されるPGM
.MQOD
、PGM
.MQMD
、PGM
.MQPMO
またはPGM
.MQGMO
データ型オブジェクトの入力値です。
UTL_RAW.BIT_AND
は、2つのRAW値のビット単位の論理AND
操作を実行します。値の長さが異なる場合、2つの値の短い方の最終バイトの後でAND
操作は終了します。長い値の未処理の部分は、最終結果を得るために部分結果に追加されます。結果値の長さは、2つの入力値の長い方と同等です。
構文
result := UTL_RAW.BIT_AND(input1, input2);
説明:
resultは、ファンクションの出力値を保持する変数です。これは、データ型RAWです。input1
またはinput2
がNULLの場合、値はNULLです。
input1は、RAW
データ型からBIT_AND
とinput2
の入力値です。
input2は、RAW
データ型からBIT_AND
とinput1
の入力値です。
UTL_RAW
.BIT_COMPLEMENT
は、RAW値のビット単位の論理COMPLEMENT
操作を実行します。結果値の長さは、入力値の長さと同じです。
構文
result := UTL_RAW.BIT_COMPLEMENT(input);
説明:
result
は、ファンクションの出力値を保持する変数です。これは、データ型RAW
です。input
がNULLの場合、値はNULLです。
input
は、COMPLEMENT
操作を実行するRAW
データ型の入力値です。
UTL_RAW.BIT_OR
は、2つのRAW値のビット単位の論理OR
操作を実行します。値の長さが異なる場合、2つの値の短い方の最終バイトの後でOR
操作は終了します。長い値の未処理の部分は、最終結果を得るために部分結果に追加されます。結果値の長さは、2つの入力値の長い方と同等です。
構文
result := UTL_RAW.BIT_OR(input1, input2);
説明:
result
は、ファンクションの出力値を保持する変数です。これは、データ型RAW
です。input1
またはinput2
がNULLの場合、値はNULLです。
input1
は、RAW
データ型からBIT_OR
とinput2
の入力値です。
input2
は、RAW
データ型からBIT_OR
とinput1
の入力値です。
UTL_RAW
.BIT_XOR
は、RAW値のビット単位の論理EXCLUSIVE
OR
操作を実行します。値の長さが異なる場合、2つの値の短い方の最終バイトの後でEXCLUSIVE
OR
操作は終了します。長い値の未処理の部分は、最終結果を得るために部分結果に追加されます。結果値の長さは、2つの入力値の長い方と同等です。
構文
result := UTL_RAW.BIT_XOR(input1, input2);
説明:
result
は、ファンクションの出力値を保持する変数です。これは、データ型RAW
です。input1
またはinput2
がNULLの場合、値はNULLです。
input1
は、RAW
データ型からEXCLUSIVE
OR
とinput2
の入力値です。
input2
は、RAW
データ型からEXCLUSIVE
OR
とinput1
の入力値です。
UTL_RAW
.CAST_TO_RAW
は、データ型VARCHAR2
の値を同じバイト数でRAW値に変換します。入力値は、文字ではなくシングルバイト8ビットの構成として処理されます。マルチバイト・キャラクタ境界は無視されます。データは、データ型RAW
に変化するのみで、まったく変更されません。
構文
result := UTL_RAW.CAST_TO_RAW(input);
説明:
result
は、ファンクションの出力値を保持する変数です。これは、データ型RAW
です。input
がNULLの場合、値はNULLです。
input
は、RAWデータに変換する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
データ型の入力値です。
UTL_RAW
.COMPARE
は、1つの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番目の入力値です。
pad
は、短い方の入力値を埋め込むために使用するシングルバイト値です。デフォルトは、X'00'です。
UTL_RAW
.CONCAT
は、最大12個のRAW値のセットを単一のRAW値に転結します。値は、左から右へパラメータ・リストに表示される順序で、まとめて追加されます。NULL入力値はスキップされ、連結は次のNULLではない値で操作を継続します。
入力値の長さの合計が、32767バイトを超える場合、VALUE_ERROR
例外が発生します。
構文
result := UTL_RAW.CONCAT(input1, ... input12);
説明:
result
は、ファンクションの出力値を保持する変数です。これは、データ型RAW
です。
input1
〜input12
は、連結するRAW
データ型の入力値です。
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
は、inputが現在使用しているグローバリゼーション・サポート・キャラクタ・セットです。
UTL_RAW
.COPIES
は、1つ以上の値のコピーを戻します。値は、まとめて連結されます。次のいずれかの条件で、A
VALUE_ERROR
例外が発生します。
入力値が、NULLであるか長さが0である。
コピー数に負の数が指定される。
結果の長さが、32767バイトを超えている。
構文
result := UTL_RAW.COPIES(input, number);
説明:
result
は、ファンクションの出力値を保持する変数です。これは、RAW
データ型です。
input
は、コピーするRAW
データ型の値です。
number
は、入力をコピーする回数です。これは、正の数である必要があります。
UTL_RAW
.LENGTH
は、RAW値の長さをバイトで戻します。
構文
result := UTL_RAW.LENGTH(input);
説明:
result
は、ファンクションの出力値です。これは、NUMBER
データ型です。
input
は、評価するRAWデータ型の入力値です。
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
の長さを超える場合に埋め込むために使用されるシングル・バイト値です。デフォルトは、X'00'です。
UTL_RAW
.REVERSE
は、エンドツーエンドからRAW値のバイト順序を逆にします。たとえば、このファンクションは、X'0102F3'を逆にしてX'F30201'に、またはxyzを逆にしてzyxにします。結果値の長さは、入力値の長さと同じです。入力値がNULLまたは長さが0の場合、A
VALUE_ERROR
例外が発生します。
構文
result := UTL_RAW.REVERSE(input);
説明:
result
は、ファンクションの出力値です。これは、RAW
データ型です。
input
は、順序を逆にするRAW
データ型の入力値です。
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より大きい必要があります。指定されない場合、入力の終わりのすべてのバイトが戻されます。
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
に変更するためのバイト・コードを指定します。これは、データ型RAW
です。
replace_bytes
は、matchで指定されたコードを置換するバイト・コードを指定します。これは、データ型RAW
です。
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
は、matchの対応するバイトが変更されたバイト・コードを指定します。この値は、RAWデータ型のいずれかの有効な長さです。デフォルトはNULL値で、必要に応じ、matchの長さまでの埋込みで有効に拡張します。
match
は、input
で一致するバイト
・コードを指定します。この値は、RAWデータ型のいずれかの有効な長さです。デフォルト値は、X'00'〜X'FF'です。
pad
は、replace_bytes
がmatchより短い場合、replace_bytes
の長さを拡張するために使用されるシングル・バイト値です。デフォルトは、X'00'です。
UTL_RAW
.TRANSLATE
は、次の点でUTL_RAW
.TRANSLITERATE
ファンクションと異なります。
一致および置換文字列で使用されるRAW値に、デフォルト値がない。
置換文字列で定義されていない入力値のバイトが、結果値で省略される。
結果値が、入力値より短いことがある。
UTL_RAW
.XRANGE
は、指定する範囲内のすべての有効なシングルバイト・コードを含むRAW値を戻します。開始バイト値が、終了バイト値よりも大きい場合、結果バイトの連続は開始バイトから始まり、X'FF'からX'00'を折り返して終了バイトで終わります。
指定する場合、開始および終了バイトの値は、シングルバイトRAW値である必要があります。
構文
result := UTL_RAW.XRANGE(start, end
);
説明:
result
は、ファンクションの出力値です。これは、データ型RAWです。
start
は、始まりのシングルバイト・コードです。デフォルトは、X'00'です。
start
は、終わりのシングルバイト・コードです。デフォルトは、X'FF'です。