Odpowiadając na moje własne pytanie:
Wygląda więc na to, że typ liczbowy Oracle może pomieścić znacznie więcej miejsc dziesiętnych niż typ dziesiętny C#, a jeśli Oracle próbuje zwrócić więcej niż może pomieścić C#, zgłasza InvalidCastException.
Rozwiązanie?
W swoim sql zaokrąglij wszystkie wyniki, które mogą mieć zbyt wiele miejsc po przecinku, do czegoś sensownego. Więc zrobiłem to:
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
I zadziałało.
Odebranie to:Niezgodność między typem liczby Oracle a dziesiętnym C#. Ogranicz miejsca dziesiętne Oracle, aby uniknąć nieprawidłowych wyjątków rzutowania.
Mam nadzieję, że to pomoże komuś innemu!