Répondre à ma propre question :
Il semble donc que le type de nombre Oracle puisse contenir beaucoup plus de décimales que le type décimal C# et si Oracle essaie de renvoyer plus que C# ne peut en contenir, il lève l'exception InvalidCastException.
Solution ?
Dans votre sql, arrondissez tous les résultats qui pourraient avoir trop de décimales à quelque chose de sensé. Alors j'ai fait ça :
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
Et ça a marché.
La conclusion est la suivante :Incompatibilité entre le type de numéro Oracle et la décimale C#. Restreignez vos décimales Oracle pour éviter les exceptions de conversion non valides.
J'espère que cela aidera quelqu'un d'autre !