The CAST_TO_BINARY_DOUBLE function converts a BINARY_DOUBLE value represented in RAW binary format to a BINARY_DOUBLE value.
Applicability
This topic applies only to OceanBase Database Enterprise Edition. OceanBase Database Community Edition does not support this function.
Syntax
UTL_RAW.CAST_TO_BINARY_DOUBLE (
r IN RAW
endianess IN PLS_INTEGER DEFAULT 1)
RETURN BINARY_DOUBLE;
Parameters
| Parameter | Description |
|---|---|
| r | The binary representation of a BINARY_DOUBLE value. |
| endianess | A BINARY_INTEGER value indicating big_endian or little-endian. The default value is big_endian. |
Return value
A BINARY_DOUBLE value.
Considerations
If the
RAWparameter exceeds 8 bytes, only the first 8 bytes are used, and the remaining bytes are ignored. If the result is-0,+0is returned. If the result isNaN, the returned value isBINARY_DOUBLE_NAN.If the
RAWparameter is less than 8 bytes, an exceptionVALUE_ERRORis raised.The following table lists the mapping between an 8-byte
BINARY_DOUBLEvalue and the IEEE 754 double-precision format: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 0The
endianessparameter describes how the bytes of aBINARY_DOUBLEvalue are mapped to the bytes of theRAWparameter, as shown in the following matrix. Here,rb0torb7represent the bytes of theRAWparameter, anddb0todb7represent the bytes of theBINARY_DOUBLEvalue.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 For
machine-endian, the 8 bytes of theRAWparameter are directly copied to the returnedBINARY_DOUBLEvalue. If you specifybig_endianon a big-endian machine orlittle_endianon a little-endian machine, the result is the same.
Examples
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
