Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Określone rzutowanie nie jest prawidłowe podczas wypełniania DataTable z OracleDataAdapter.Fill()

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!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zwrócić ułamki sekund z wartości daty i godziny w Oracle?

  2. Jak uzyskać hibernację, aby wygenerować składnię Oracle FOR UPDATE WAIT 10?

  3. Napraw błąd „ORA-01789:blok zapytania ma nieprawidłową liczbę kolumn wyników”

  4. Udowodnienie równoważności zapytań SQL

  5. Jak zaimplementować ten wyzwalacz w Oracle SQL?