Oracle
 sql >> Datenbank >  >> RDS >> Oracle

TO_CHAR(Zahl) Funktion gibt ORA-01722 zurück:ungültige Zahl

Ich gehe davon aus, dass qty ist als varchar2 definiert in my_table -- andernfalls würde der Aufruf von to_number keinen Zweck erfüllen . Wenn diese Annahme richtig ist, wette ich, dass es eine andere Zeile in der Tabelle gibt, in der qty enthält nicht-numerische Daten.

SQL ist eine mengenbasierte Sprache, sodass es Oracle (oder jeder anderen Datenbank) vollkommen freisteht, Dinge in jeder beliebigen Reihenfolge auszuwerten. Das bedeutet, dass es Oracle vollkommen freisteht, to_number(qty) auszuwerten -Ausdruck, bevor Sie id=12345 anwenden Prädikat. Wenn Oracle auf eine Zeile stößt, in der die qty Wert kann nicht in eine Zahl umgewandelt werden, es wird ein Fehler ausgegeben.

Es ist auch möglich, dass in der bestimmten Zeile, in der id = 12345 ist, einige nicht numerische Daten vorhanden sind die zufällig nicht angezeigt werden (z. B. Steuerzeichen). Sie können dies überprüfen, indem Sie die Abfrage ausführen

SELECT dump(qty, 1016) 
  FROM my_table
 WHERE id = 12345

(Wenn Sie dezimal statt hexadezimal wollen, verwenden Sie 1010 als zweiten Parameter für dump ) und prüfen, ob die Daten etwas Unerwartetes enthalten.