Menjawab pertanyaan saya sendiri:
Jadi sepertinya tipe angka Oracle dapat menampung lebih banyak tempat desimal daripada tipe desimal C# dan jika Oracle mencoba mengembalikan lebih dari yang dapat disimpan oleh C#, ia melempar InvalidCastException.
Solusi?
Di sql Anda, bulatkan hasil apa pun yang mungkin memiliki terlalu banyak tempat desimal menjadi sesuatu yang masuk akal. Jadi saya melakukan ini:
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
Dan itu berhasil.
Kesimpulannya adalah:Ketidakcocokan antara tipe angka Oracle dan desimal C#. Batasi tempat desimal Oracle Anda untuk menghindari pengecualian cast yang tidak valid.
Semoga ini bisa membantu orang lain!