UTL_RAWパッケージは、RAWデータ・タイプを操作するためのSQLファンクションを提供します。
この章では、次の項目について説明します。
概要
使用上の注意
通常のSQLファンクションは複数のRAWで作動せず、PL/SQLはRAWデータ・タイプとCHARデータ・タイプの間でのオーバーロードができないため、このパッケージが必要になります。UTL_RAWには、各種のCOBOL数値形式を複数のRAWの間で変換するサブプログラムも含まれています。
UTL_RAWは、必ずしもデータベース環境に固有のものではなく、実際には他の環境でも使用できます。このため、DBMSのかわりに、UTLという接頭辞がパッケージに付けられます。
UTL_RAWによって、RAWレコードは多くの要素で構成できます。RAWデータ・タイプを使用すると、キャラクタ・セット変換は実行されず、RAWは、リモート・プロシージャ・コールを介して転送されるときに元の形式で保持されます。
また、RAWファンクションによって、以前はhextorawファンクションとrawtohexファンクションに限定されていたバイナリ・データを操作できます。
|
注意: データ・タイプに関する注:
|
表260-1 UTL_RAWパッケージのサブプログラム
| サブプログラム | 説明 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
CAST_FROM_BINARY_DOUBLEファンクション |
|
|
|
|
|
CAST_FROM_BINARY_INTEGERファンクション |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RAW値を |
|
|
|
|
|
最大12までの |
|
|
|
|
|
|
|
|
|
|
|
target |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
値 |
このファンクションは、RAW rの値でビット単位の論理演算補数を実行し、補数演算後の結果RAWを戻します。結果の長さは、入力RAW rの長さと等しくなります。
このファンクションは、BINARY_DOUBLE値のRAWバイナリ表現を戻します。
構文
UTL_RAW.CAST_FROM_BINARY_DOUBLE( n IN BINARY_DOUBLE, endianess IN PLS_INTEGER DEFAULT 1) RETURN RAW;
使用上の注意
8バイトのbinary_double値からIEEE 754倍精度形式へのマッピングは、次のとおりです。
byte 0: bit 63 ~ bit 56 byte 1: bit 55 ~ bit 48 byte 2: bit 47 ~ bit 40 byte 3: bit 39 ~ bit 32 byte 4: bit 31 ~ bit 24 byte 5: bit 23 ~ bit 16 byte 6: bit 15 ~ bit 8 byte 7: bit 7 ~ bit 0
endianessパラメータでは、BINARY_DOUBLEのバイトからRAWのバイトへのマッピング方法が記述されます。次のマトリックスでは、rb0からrb7がRAWのバイトを参照し、db0からdb7がBINARY_DOUBLEのバイトを参照しています。
| rb0 | rb1 | rb2 | rb3 | rb4 | rb5 | rb6 | rb7 | |
|---|---|---|---|---|---|---|---|---|
| big_endian | db0 |
db1 |
db2 |
db3 |
db4 |
db5 |
db6 |
db7 |
| little_endian | db7 |
db6 |
db5 |
db4 |
db3 |
db2 |
db1 |
db0 |
machine-endianの場合、BINARY_DOUBLE引数の8バイトがRAWの戻り値に直接コピーされます。big-endianマシン上のbig_endianまたはlittle-endianマシン上のlittle_endianを渡した場合も同じです。
このファンクションは、BINARY_FLOAT値のRAWバイナリ表現を戻します。
構文
UTL_RAW.CAST_FROM_BINARY_FLOAT( n IN BINARY_FLOAT, endianess IN PLS_INTEGER DEFAULT 1) RETURN RAW;
使用上の注意
4バイトのbinary_float値からIEEE 754単精度形式へのマッピングは、次のとおりです。
byte 0: bit 31 ~ bit 24 byte 1: bit 23 ~ bit 16 byte 2: bit 15 ~ bit 8 byte 3: bit 7 ~ bit 0
endianessパラメータでは、BINARY_FLOATのバイトからRAWのバイトへのマッピング方法が記述されます。次のマトリックスでは、rb0からrb3がRAWのバイトを参照し、fb0からfb3がBINARY_FLOATのバイトを参照しています。
| rb0 | rb1 | rb2 | rb3 | |
|---|---|---|---|---|
| big_endian | fb0 | fb1 | fb2 | fb3 |
| little_endian | fb3 | fb2 | fb1 | fb0 |
machine-endianの場合、BINARY_FLOAT引数の4バイトがRAWの戻り値に直接コピーされます。big-endianマシン上のbig_endianまたはlittle-endianマシン上のlittle_endianを渡した場合も同じです。
このファンクションは、BINARY_INTEGER値のRAWバイナリ表現を戻します。
構文
UTL_RAW.CAST_FROM_BINARY_INTEGER ( n IN BINARY_INTEGER endianess IN PLS_INTEGER DEFAULT BIG_ENDIAN) RETURN RAW;
このファンクションは、BINARY_DOUBLEのRAWバイナリ表現をBINARY_DOUBLEに変換します。
構文
UTL_RAW.CAST_TO_BINARY_DOUBLE ( r IN RAW endianess IN PLS_INTEGER DEFAULT 1) RETURN BINARY_DOUBLE;
使用上の注意
RAW引数が8バイトを超える場合は、最初の8バイトだけが使用され、残りのバイトは無視されます。結果が-0の場合は、+0が戻されます。結果がNaNの場合は、BINARY_DOUBLE_NANの値が戻されます。
RAW引数が8バイト未満の場合は、VALUE_ERROR例外が発生します。
8バイトのbinary_double値からIEEE 754倍精度形式へのマッピングは、次のとおりです。
byte 0: bit 63 ~ bit 56 byte 1: bit 55 ~ bit 48 byte 2: bit 47 ~ bit 40 byte 3: bit 39 ~ bit 32 byte 4: bit 31 ~ bit 24 byte 5: bit 23 ~ bit 16 byte 6: bit 15 ~ bit 8 byte 7: bit 7 ~ bit 0
endianessパラメータでは、BINARY_DOUBLEのバイトからRAWのバイトへのマッピング方法が記述されます。次のマトリックスでは、rb0からrb7がRAWのバイトを参照し、db0からdb7がBINARY_DOUBLEのバイトを参照しています。
| rb0 | rb1 | rb2 | rb3 | rb4 | rb5 | rb6 | rb7 | |
|---|---|---|---|---|---|---|---|---|
| big_endian | db0 |
db1 |
db2 |
db3 |
db4 |
db5 |
db6 |
db7 |
| little_endian | db7 |
db6 |
db5 |
db4 |
db3 |
db2 |
db1 |
db0 |
machine-endianの場合、RAW引数の8バイトがBINARY_DOUBLEの戻り値に直接コピーされます。big-endianマシン上のbig_endianまたはlittle-endianマシン上のlittle_endianを渡した場合も同じです。
このファンクションは、BINARY_FLOATのRAWバイナリ表現をBINARY_FLOATに変換します。
使用上の注意
RAW引数が4バイトを超える場合は、最初の4バイトだけが使用され、残りのバイトは無視されます。結果が-0の場合は、+0が戻されます。結果がNaNの場合は、BINARY_FLOAT_NANの値が戻されます。
RAW引数が4バイト未満の場合は、VALUE_ERROR例外が発生します。
4バイトのbinary_float値からIEEE 754単精度形式へのマッピングは、次のとおりです。
byte 0: bit 31 ~ bit 24 byte 1: bit 23 ~ bit 16 byte 2: bit 15 ~ bit 8 byte 3: bit 7 ~ bit 0
endianessパラメータでは、BINARY_FLOATのバイトからRAWのバイトへのマッピング方法が記述されます。次のマトリックスでは、rb0からrb3がRAWのバイトを参照し、fb0からfb3がBINARY_FLOATのバイトを参照しています。
| rb0 | rb1 | rb2 | rb3 | |
|---|---|---|---|---|
| big_endian | fbo |
fb1 |
fb2 |
fb3 |
| little_endian | fb3 |
fb2 |
fb1 |
fb0 |
machine-endianの場合、RAW引数の4バイトがBINARY_FLOATの戻り値に直接コピーされます。big-endianマシン上のbig_endianまたはlittle-endianマシン上のlittle_endianを渡した場合も同じです。
このファンクションは、BINARY_INTEGERのRAWバイナリ表現をBINARY_INTEGERに変換します。
構文
UTL_RAW.CAST_TO_BINARY_INTEGER ( r IN RAW endianess IN PLS_INTEGER DEFAULT BIG_ENDIAN) RETURN BINARY_INTEGER;
このファンクションは、一定数のデータ・バイトを使用して表したRAW値を、同じ数のデータ・バイトのNVARCHAR2値に変換します。
|
注意: NVARCHAR2への変換時、そのNVARCHAR2値内の文字に対して現行のグローバリゼーション・サポート・キャラクタ・セットが使用されます。 |
このファンクションは、一定数のデータ・バイトを使用して表したVARCHAR2値を、同じ数のデータ・バイトのRAW値に変換します。データ自体は変更されませんが、そのデータ・タイプはRAWデータ・タイプに再変換されます。
このファンクションは、一定数のデータ・バイトを使用して表したRAW値を、同じ数のデータ・バイトのVARCHAR2値に変換します。
|
注意: VARCHAR2への変換時、そのVARCHAR2内の文字に対して現行のグローバリゼーション・サポート・キャラクタ・セットが使用されます。 |
このファンクションは、最大12までのRAWを単一のRAWに連結します。連結したサイズが32Kを超える場合は、エラーが戻ります。
構文
UTL_RAW.CONCAT ( r1 IN RAW DEFAULT NULL, r2 IN RAW DEFAULT NULL, r3 IN RAW DEFAULT NULL, r4 IN RAW DEFAULT NULL, r5 IN RAW DEFAULT NULL, r6 IN RAW DEFAULT NULL, r7 IN RAW DEFAULT NULL, r8 IN RAW DEFAULT NULL, r9 IN RAW DEFAULT NULL, r10 IN RAW DEFAULT NULL, r11 IN RAW DEFAULT NULL, r12 IN RAW DEFAULT NULL) RETURN RAW;
このファンクションは、RAW rをキャラクタ・セットfrom_charsetからキャラクタ・セットto_charsetに変換し、結果のRAWを戻します。
from_charsetとto_charsetは両方とも、Oracleサーバーに定義されているサポート・キャラクタのセットである必要があります。
使用上の注意
NLS_LANGパラメータ・フォームlanguage_territory.character setは、to_charsetおよびfrom_charsetにも受け入れられます。ただし、このフォームは非推奨のため、使用しないことをお薦めします。languageおよびterritoryは、このサブプログラムでは無視されます。
変換後の値がRAW値の最大長である32767バイトを超えている場合は、警告なしで切り捨てられます。to_charsetとfrom_charsetのすべての可能な組合せでこの切捨てを避けたい場合は、floor(32767/4) = 8191バイトよりも長い値を変換しないでください。変換先のキャラクタ・セットto_charsetの最大文字幅が判明している場合は、それを使用して制限をあまりペシミスティックでない値に拡大できます。たとえば、変換先のキャラクタ・セットがZHS16GBKの場合、その最大限安全なソース文字列長さはfloor(32767/2) = 16383バイトになります。シングルバイトの変換先キャラクタ・セットの場合、切捨ては一切必要ありません。
このファンクションは、target RAWの指定部分をoverlay_str RAWでオーバーレイし、targetの位置posバイトから始まるlenバイト分を処理します。
構文
UTL_RAW.OVERLAY ( overlay_str IN RAW, target IN RAW, pos IN BINARY_INTEGER DEFAULT 1, len IN BINARY_INTEGER DEFAULT NULL, pad IN RAW DEFAULT NULL) RETURN RAW;
使用上の注意
overlay_strがlenバイト未満の場合は、padバイト列を使用してlenバイトまで拡張されます。overlay_strがlenバイトを超える場合は、overlay_strの余分なバイトは無視されます。targetの位置posから始まるlenバイトがtargetの長さを超える場合、overlay_str全体を含む長さまでtargetが拡張されます。
lenを指定する場合は、0 (ゼロ)以上にする必要があります。posを指定する場合は、1以上にする必要があります。posがtargetの長さを超える場合、targetはpadバイト列を使用してposの位置まで埋め込まれます。さらに、targetはoverlay_strバイト列を使用して拡張されます。
このファンクションは、RAW rのバイト順序を、最後から最初に逆転させます。たとえば、x'0102F3'はx'F30201'になり、'xyz'は'zyx'に逆転されます。結果は、入力RAWと同じ長さになります。
このファンクションは、RAW rのposからlenバイトを戻します。
構文
UTL_RAW.SUBSTR ( r IN RAW, pos IN BINARY_INTEGER, len IN BINARY_INTEGER DEFAULT NULL) RETURN RAW;
このファンクションは、from_setとto_setのバイト列変換に従って、入力RAW r内のバイト列を変換します。r内のバイト列がfrom_set内のバイト列と一致すると、to_set内の対応する位置にあるバイト列に置換され、一致しないと削除されます。
r内のバイト列がfrom_setで未定義の場合は、結果にコピーされます。from_setにある最初(最左端)のバイト列のみ使用されます。後続の複製部分はスキャンされずに無視されます。
構文
UTL_RAW.TRANSLATE ( r IN RAW, from_set IN RAW, to_set IN RAW) RETURN RAW;
|
注意: コール順序のto_setおよびfrom_setが、TRANSLITERATEと比較して逆になっていることに注意してください。 |
使用上の注意
to_setがfrom_setより短い場合、from_setの余分なバイト列に対応する変換バイト列はありません。このようなfrom_setバイト列に一致する入力RAWのバイト列は、変換されないか、結果に含まれません。これらのバイト列は、事実上NULLに変換されます。
to_setがfrom_setより長い場合、to_setの余分なバイト列は無視されます。
バイト値がfrom_setで繰り返されている場合、その繰返し部分は無視されます。
|
注意: TRANSLITERATEファンクションとは、次の点で異なります。
|
このファンクションは、from_setとto_setのバイト列変換に従って、入力RAW r内のバイト列を変換します。r内の連続するバイト列がfrom_set内で検索され、見つからない場合は、変更しないまま結果RAWにコピーされます。見つかった場合、そのバイト列は、to_setの対応するバイト列、対応するバイト列が存在しない場合はpadバイト列のいずれかに結果RAW内で置換されます。
r内のバイト列がfrom_setで未定義の場合は、結果にコピーされます。from_setにある最初(最左端)のバイト列のみ使用されます。後続の複製部分はスキャンされずに無視されます。結果RAWは、常にrと同じ長さになります。
構文
UTL_RAW.TRANSLITERATE ( r IN RAW, to_set IN RAW DEFAULT NULL, from_set IN RAW DEFAULT NULL, pad IN RAW DEFAULT NULL) RETURN RAW;
|
注意: コール順序のto_setおよびfrom_setが、TRANSLATEと比較して逆になっていることに注意してください。 |
使用上の注意
to_setがfrom_setより短い場合、from_setの余分なバイト列に対応する変換バイト列はありません。このようなfrom_setバイト列に一致する入力RAWのバイト列は、結果でpadバイト列に変換されます。
to_setがfrom_setより長い場合、to_setの余分なバイト列は無視されます。
バイト値がfrom_setで繰り返されている場合、その繰返し部分は無視されます。
|
注意: TRANSLATEファンクションとは、次の点で異なります。
|