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.