Zakładam, że qty
jest zdefiniowany jako varchar2
w my_table
-- w przeciwnym razie wywołanie to_number
nie miałoby sensu . Jeśli to założenie jest poprawne, założę się, że w tabeli jest inny wiersz, w którym qty
zawiera dane nieliczbowe.
SQL jest językiem opartym na zbiorach, więc Oracle (lub jakakolwiek inna baza danych) może swobodnie oceniać rzeczy w dowolnej kolejności, jaką uzna za stosowną. Oznacza to, że Oracle ma całkowitą swobodę oceny to_number(qty)
wyrażenie przed zastosowaniem id=12345
orzec. Jeśli Oracle napotka wiersz, w którym qty
wartości nie można przekonwertować na liczbę, spowoduje to błąd.
Możliwe jest również, że w konkretnym wierszu znajdują się dane nieliczbowe, w których id = 12345
akurat się nie wyświetla (na przykład znaki sterujące). Możesz to sprawdzić, uruchamiając zapytanie
SELECT dump(qty, 1016)
FROM my_table
WHERE id = 12345
(jeśli chcesz dziesiętny, a nie szesnastkowy, użyj 1010 jako drugiego parametru do dump
) i sprawdzanie, czy w danych nie ma czegoś nieoczekiwanego.