CAST_TO_BINARY_DOUBLE

2023-10-31 11:17:11  Updated

The CAST_TO_BINARY_DOUBLE function converts a BINARY_DOUBLE value in the binary RAW representation into a BINARY_DOUBLE value.

Applicability

This topic applies only to OceanBase Database Enterprise Edition. OceanBase Database Community Edition provides only MySQL mode.

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 BINARY_DOUBLE.
endianess The BINARY_INTEGER value that represents big_endian or little-endian. The default value is big_endian.

Return values

A BINARY_DOUBLE value is returned.

Considerations

  • If the RAW parameter exceeds 8 bytes in length, only the first 8 bytes are used and the remaining bytes are ignored. If the result is -0, +0 is returned. If the result is NaN, the return value is BINARY_DOUBLE_NAN.

  • If the RAW parameter is less than 8 bytes in length, the VALUE_ERROR exception is thrown.

  • The following list shows the mapping between an 8-byte BINARY_DOUBLE value 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 0
    
  • The endianess parameter describes how BINARY_DOUBLE bytes are mapped to RAW bytes, as shown in the following matrix. rb0–rb7 are the RAW bytes, and db0–db7 are the BINARY_DOUBLE bytes.

    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 the RAW parameter are copied directly into the return BINARY_DOUBLE value. Passing big_endian on a big-endian machine has the same effect as passing little_endian on a little-endian machine.

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

Contact Us