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
ファンクションに限定されていたバイナリ・データを操作できます。
注意: データ・タイプに関する注意:
|
表233-1 UTL_RAWパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
|
|
|
|
|
|
|
CAST_FROM_BINARY_DOUBLEファンクション |
|
|
|
CAST_FROM_BINARY_INTEGERファンクション |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
最大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サーバーに定義されているサポート・キャラクタのセットである必要があります。
このファンクションは、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ファンクションとは、次の点で異なります。
|