CAST_TO_BINARY_DOUBLE関数は、RAWバイナリ形式で表されるBINARY_DOUBLE値をBINARY_DOUBLEに変換するために使用されます。
適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
構文
UTL_RAW.CAST_TO_BINARY_DOUBLE (
r IN RAW
endianess IN PLS_INTEGER DEFAULT 1)
RETURN BINARY_DOUBLE;
パラメータの説明
| パラメータ | 説明 |
|---|---|
| r | BINARY_DOUBLE のバイナリ表現形式。 |
| endianess | BINARY_INTEGER 値で、big_endian または little-endian を表します。デフォルト値は big_endian です。 |
戻り値
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内のバイトを指します。 | endianess | 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を渡した場合でも、小端マシンでlittle_endianを渡した場合でも、効果は同じです。
例
obclient> SELECT UTL_RAW.CAST_TO_BINARY_DOUBLE('0018FCFF18FCFFFF') FROM DUAL;
+---------------------------------------------------+
| UTL_RAW.CAST_TO_BINARY_DOUBLE('0018FCFF18FCFFFF') |
+---------------------------------------------------+
| 3.4750462962832636E-308 |
+---------------------------------------------------+
1 row in set
obclient> SELECT UTL_RAW.CAST_TO_BINARY_DOUBLE('0018FCFF18FCFFFF', 1) FROM DUAL;
+-----------------------------------------------------+
| UTL_RAW.CAST_TO_BINARY_DOUBLE('0018FCFF18FCFFFF',1) |
+-----------------------------------------------------+
| 3.4750462962832636E-308 |
+-----------------------------------------------------+
1 row in set
obclient> SELECT UTL_RAW.CAST_TO_BINARY_DOUBLE('0018FCFF18FCFFFF', 2) FROM DUAL;
+-----------------------------------------------------+
| UTL_RAW.CAST_TO_BINARY_DOUBLE('0018FCFF18FCFFFF',2) |
+-----------------------------------------------------+
| Nan |
+-----------------------------------------------------+
1 row in set
obclient> SELECT UTL_RAW.CAST_TO_BINARY_DOUBLE('0018FCFF18FCFFFF', 3) FROM DUAL;
+-----------------------------------------------------+
| UTL_RAW.CAST_TO_BINARY_DOUBLE('0018FCFF18FCFFFF',3) |
+-----------------------------------------------------+
| Nan |
+-----------------------------------------------------+
1 row in set