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.