Ho visto decimale usato invece di int/long in vari esempi. Sto solo cercando di capire perché
Probabilmente è perché .NET decimal e Oracle NUMBER mappe un po' meglio di long e NUMBER e ti dà anche più flessibilità. Se in una fase successiva aggiungi una scala nella colonna Oracle non dovresti cambiare il tipo di dati se hai già utilizzato decimal .
decimal è sicuramente più lento di int e long poiché gli ultimi due sono supportati nell'hardware. Detto questo, devi sgranocchiare una seria quantità di dati affinché faccia la differenza. Continuo a pensare che dovresti usare long se questo è ciò con cui hai a che fare e quindi dovresti anche lasciare che le definizioni delle colonne della tabella lo rappresentino. NUMBER(18,0) per long e così via.
Il motivo decimal mappe un po' meglio è che long è 64 bit e decimal è (più o meno) 128 bit.
.NET
Digita:decimale
Intervallo approssimativo:da ±1,0 × 10^−28 a ±7,9 × 10^28
Precisione:28-29 cifre significativeDigita:lungo
Intervallo:da –9.223.372.036.854.775.808 a 9.223.372.036.854.775.807
Precisione:18 (19 per ulong) cifre significative
Oracolo
NUMBER il valore predefinito è 38 cifre significative e scala 0 (intero).
Digita:NUMERO
Intervallo:+- 1 x 10^-130 a 9,99...9 x 10^125
Precisione:38 cifre significative
Microsoft è a conoscenza del problema e delle note
Questo tipo di dati è un alias per il tipo di dati NUMBER(38) ed è progettato in modo che OracleDataReader restituisca un System.Decimal o OracleNumber invece di un valore intero. L'utilizzo del tipo di dati .NETFramework può causare un overflow.
A pensarci bene, in realtà hai bisogno di BigInteger per poter rappresentare lo stesso numero di cifre significative di quale NUMBER predefinito a. Non ho mai visto nessuno farlo e suppongo che sia un'esigenza molto rara. Anche BigInteger ancora non lo taglierei da NUMBER può essere di infinito positivo e negativo.