Presumo che qty
è definito come varchar2
in my_table
-- altrimenti, non ci sarebbe scopo chiamando to_number
. Se questa ipotesi è corretta, scommetto che c'è qualche altra riga nella tabella in cui qty
contiene dati non numerici.
SQL è un linguaggio basato su set, quindi Oracle (o qualsiasi altro database) è perfettamente libero di valutare le cose nell'ordine che ritiene opportuno. Ciò significa che Oracle è perfettamente libero di valutare to_number(qty)
espressione prima di applicare id=12345
predicato. Se Oracle incontra una riga in cui qty
il valore non può essere convertito in un numero, genererà un errore.
È anche possibile che ci siano dei dati non numerici nella riga particolare dove id = 12345
che non viene visualizzato (ad esempio i caratteri di controllo). Puoi verificarlo eseguendo la query
SELECT dump(qty, 1016)
FROM my_table
WHERE id = 12345
(se vuoi decimale anziché esadecimale, usa 1010 come secondo parametro per dump
) e controllando se c'è qualcosa di imprevisto nei dati.