Ispirer Website
Ispirer Capabilities: Oracle Migration
Free Trial
Description
When extracting data from Oracle tables, columns declared as NUMBER without specified precision and scale (i.e., NUMBER instead of NUMBER(p,s)) can lead to precision loss during data export.
In this case, the driver interprets the Oracle NUMBER type as a DOUBLE, and due to the nature of the DOUBLE data type, numeric values are rounded after approximately the 15th–17th significant digit. As a result, the exported data may not exactly match the source values stored in Oracle.
Example
| Oracle Declaration | Interpreted Type | Result | 
|---|---|---|
| NUMBER | DOUBLE | Rounded after 15 digits | 
| NUMBER(38,0) | DECIMAL(38,0) | Exact numeric representation preserved | 
In Oracle, declaring a column as NUMBER without specifying precision (p) or scale (s) means the value should be treated as is, without any implicit rounding or truncation. However, since DOUBLE is a floating-point representation with limited precision, it cannot accurately store large or high-precision integers.
Cause
By default, the Oracle ODBC driver bind NUMBER types without explicit precision as DOUBLE. This behavior leads to automatic floating-point conversion, which in turn causes rounding when the numeric value exceeds 15–17 significant digits.
The column contains large integers or high-precision decimals.
Solution
To preserve full numeric precision for NUMBER columns declared without precision and scale, enable the Bind NUMBER as FLOAT option in the driver configuration:
 
When this option is enabled, the driver binds Oracle NUMBER values as FLOAT, ensuring that the connector retrieves and processes the data as unrounded numeric values, matching the source.
Behavior After Enabling the Option
| Oracle Declaration | Interpreted Type | Result | 
|---|---|---|
| NUMBER | FLOAT | Full precision preserved, no rounding | 
| NUMBER(38,0) | DECIMAL(38,0) | No change (exact numeric type preserved) | 
Summary
| Scenario | Default Behavior | With Bind NUMBER as FLOAT | 
|---|---|---|
| NUMBER without (p,s) | Interpreted as DOUBLE: rounding after 15 digits | Interpreted as FLOAT: no rounding | 
| NUMBER(p,s) | Interpreted as DECIMAL(p,s) | No change | 
Recommendation
If your Oracle schema contains columns declared as NUMBER without explicit precision and maintaining exact numeric values is critical (e.g., for IDs, financial data, or keys), enable the Bind NUMBER as FLOAT option in your driver or data extraction tool.
This ensures numeric fidelity and prevents discrepancies between source and target datasets.
If you have any other questions, please contact us: support@ispirer.com