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-bit)」を参照してください。
- 「メッセージ・データ型」
WebSphere MQキューに送信されたメッセージまたはWebSphere MQキューから取得されたメッセージは、MIPプロシージャによって型なしデータとして転送されます。 - 「UTL_RAW関数」
このトピックでは、UTL_RAW関数について説明します。
メッセージのデータ型
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パッケージです。
必要に応じ、UTL_RAWファンクションを使用して、生成済MIPのメッセージ・データ変換を拡張できます。 データ・プロファイルがMIPで定義されていない場合、UTL_RAWファンクションを使用する独自の変換プロシージャを作成し、メッセージの送信およびメッセージの受信直後に、これらの機能をコールできます。
UTL_RAWパッケージは、ゲートウェイに含まれません。 これは、各Oracleデータベースとともに出荷されます。 UTL_RAWパッケージの詳細は、使用するOracle DBAを参照してください。
UTL_RAW関数
このトピックでは、UTL_RAW関数について説明します。
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で文字データ型に変換され、表示されます。
- UTL_RAW.TO_RAW
- UTL_RAW.BIT_AND
- UTL_RAW.BIT_COMPLEMENT
- UTL_RAW.BIT_OR
- UTL_RAW.BIT_XOR
- UTL_RAW.CAST_TO_RAW
- UTL_RAW.CAST_TO_VARCHAR2
- UTL_RAW.COMPARE
- UTL_RAW.CONCAT
- UTL_RAW.CONVERT
- UTL_RAW.COPIES
- UTL_RAW.LENGTH
- UTL_RAW.OVERLAY
- UTL_RAW.REVERSE
- UTL_RAW.SUBSTR
- UTL_RAW.TRANSLATE
- UTL_RAW.TRANSLITERATE
- UTL_RAW.XRANGE
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です。
-
inputは、ロー・データに変換される
PGM.MQOD、PGM.MQMD、PGM.MQPMOまたはPGM.MQGMOデータ型オブジェクトの入力値です。
UTL_RAW.BIT_AND
UTL_RAW.BIT_ANDは、2つの生の値に対してビット単位の論理AND操作を実行します。 値の長さが異なる場合、2つの値の短い方の最終バイトの後でAND操作は終了します。 長い値の未処理の部分は、最終結果を得るために部分結果に追加されます。 結果値の長さは、2つの入力値の長い方と同等です。
構文
result := UTL_RAW.BIT_AND(input1, input2);
説明:
-
resultは、ファンクションの出力値を保持する変数です。 これは、データ型RAWです。
input1またはinput2がnullの場合、値はNULLです。 -
input1は、
input2を使用するBIT_ANDへのデータ型RAWの入力値です。 -
input2は、
input1を使用するBIT_ANDのデータ型RAWの入力値です。
UTL_RAW.BIT_OR
UTL_RAW.BIT_ORは、2つの生の値のビット単位の論理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
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は、EXCLUSIVEORとinput2のRAWデータ型の入力値です。 -
input2は、EXCLUSIVEORとinput1のRAWデータ型の入力値です。
UTL_RAW.CAST_TO_VARCHAR2
UTL_RAW。CAST_TO_VARCHAR2は、生の値を同じデータ・バイト数のデータ型VARCHAR2の値に変換します。 結果は、文字ではなく、シングルバイト8ビットの構成として処理されます。 マルチバイト・キャラクタ境界は無視されます。 データは、データ型VARCHAR2に変化するのみで、まったく変更されません。
構文
result := UTL_RAW.CAST_TO_VARCHAR2(input);
説明:
-
resultは、ファンクションの出力値を保持する変数です。 これは、データ型VARCHAR2です。inputがnullの場合、値はnullです。 -
inputは、データ型VARCHAR2に変換するRAWデータ型の入力値です。
UTL_RAW.COMPARE
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
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
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
UTL_RAW.COPIESは、1つ以上の値のコピーを戻します。 値は、まとめて連結されます。 次のいずれかの条件で、A VALUE_ERROR例外が発生します。
-
入力値が、NULLであるか長さが0である。
-
コピー数に負の数が指定される。
-
結果の長さが、32767バイトを超えている。
構文
result := UTL_RAW.COPIES(input, number);
説明:
-
resultは、ファンクションの出力値を保持する変数です。 これは、RAWデータ型です。 -
inputは、コピーするRAWデータ型の値です。 -
numberは、入力をコピーする回数です。 これは、正の数である必要があります。
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'です。
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の指定された1バイト以上です。inputがnullの場合、値はヌル値になります。 -
inputは、バイトの一部を抽出するRAWデータ型の入力値です。 -
positionは、抽出を開始するバイト位置です。 この値は、0にはできません。positionの値が負の場合、SUBSTRは入力の最後から逆方向に数えます。 -
lengthは、positionの後にinputから抽出するバイト数です。 この値は、0より大きい必要があります。 指定されない場合、入力の終わりのすべてのバイトが戻されます。
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です。
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は、matchの対応するバイトが変更されたバイト・コードを指定します。 この値は、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値に、デフォルト値がない。
-
置換文字列で定義されていない入力値のバイトが、結果値で省略される。
-
結果値が、入力値より短いことがある。
-
UTL_RAW.XRANGE
UTL_RAW.XRANGEは、指定する範囲内のすべての有効なシングルバイト・コードを含むRAW値を戻します。 開始バイト値が、終了バイト値よりも大きい場合、結果バイトの連続は開始バイトから始まり、X'FF'からX'00'を折り返して終了バイトで終わります。
指定する場合、開始および終了バイトの値は、シングルバイトRAW値である必要があります。
構文
result := UTL_RAW.XRANGE(start, end);
説明:
-
resultは、ファンクションの出力値です。 これは、データ型RAWです。 -
startは、始まりのシングルバイト・コードです。 デフォルトは、X'00'です。 -
startは、終わりのシングルバイト・コードです。 デフォルトは、X'FF'です。