Odpověď na mou vlastní otázku:
Zdá se tedy, že číselný typ Oracle může obsahovat mnohem více desetinných míst než desetinný typ C# a pokud se Oracle snaží vrátit více, než dokáže pojmout C#, vyvolá výjimku InvalidCastException.
Řešení?
Ve vašem SQL zaokrouhlete všechny výsledky, které mohou mít příliš mnoho desetinných míst, na něco rozumného. Tak jsem udělal toto:
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
A fungovalo to.
Odvod je:Nekompatibilita mezi typem čísel Oracle a C# dekadickým. Omezte svá desetinná místa Oracle, abyste se vyhnuli neplatným výjimkám přetypování.
Doufám, že to pomůže někomu dalšímu!