Questa è una speculazione basata su un comportamento simile nel driver Postgres postgresql-9.4-1204-jdbc42.jar
.
Per un NUMERIC
non specificato il database non sembra memorizzare alcuna informazione particolare sulla precisione e la scala della colonna. Ciò consente al database di archiviare internamente il valore in qualsiasi modo sembri adatto. Da https://www.postgresql.org/docs/current/ static/datatype-numeric.html
Dal driver non sa quale sia il massimo specifico dell'implementazione del server cioè, non può restituire i valori effettivi. Restituisce 0 per indicare che non conosce i valori effettivi e non vuole fare ipotesi plausibili.
Sembra che la situazione sia la la stessa con Oracle . La precisione massima potrebbe essere maggiore, ma portabilità è garantito solo fino a 38 cifre.
Per quanto riguarda la risoluzione del problema nella domanda, come indicato da StanislavL, puoi forzare il valore a una precisione/scala specifica mediante casting.