Oracle
 sql >> Database >  >> RDS >> Oracle

TO_CHAR(numero) La funzione restituisce ORA-01722:numero non valido

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.