Hello everyone,
I found a strange Oracle NUMBER internal representation issue and would like to understand whether this is expected, corruption, or a known bug.
Example:
Normal value:
select dump(396) from dual;
Typ=2 Len=3: 194,4,97
Problematic value stored in a NUMBER column:
select dump(col) from my_table;
Typ=2 Len=4: 194,4,96,101
Interestingly:
select dump(col), dump(col * 1)
from my_table;
returns:
dump(col) = Typ=2 Len=4: 194,4,96,101
dump(col * 1) = Typ=2 Len=3: 194,4,97
So arithmetic normalization (* 1) converts the value into canonical form.
The numeric value itself is still interpreted as 396, but some operations (including TO_NUMBER in certain contexts) may fail with ORA-01722.
Questions:
- Is
194,4,96,101 a valid non-canonical Oracle NUMBER representation?
- Can Oracle legitimately store base-100 digit 100 internally?
- Is this usually caused by corruption, old client libraries, direct path load, OCI/JDBC bugs, or import/export issues?
- Are there known MOS notes / bugs related to this behavior?
Oracle version: Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.30.0.0.0
Platform: Windows