Rispondendo alla mia stessa domanda:
Quindi sembra che il tipo numerico Oracle possa contenere molte più posizioni decimali rispetto al tipo decimale C# e se Oracle sta cercando di restituire più di quanto C# può contenere, genera InvalidCastException.
Soluzione?
Nel tuo sql, arrotonda tutti i risultati che potrebbero avere troppe cifre decimali a qualcosa di sensato. Quindi ho fatto questo:
SELECT acct_no, ROUND(market_value/mv_total, 8) -- rounding this division solves the problem
FROM myTable
WHERE NVL(market_value, 0) != 0
AND NVL(mv_total, 0) != 0
E ha funzionato.
Il take away è:Incompatibilità tra il tipo di numero Oracle e C# decimale. Limita le tue posizioni decimali Oracle per evitare eccezioni di cast non valide.
Spero che questo aiuti qualcun altro!