Предполагам, че qty
се дефинира като varchar2
в my_table
-- в противен случай няма да има смисъл от извикване на to_number
. Ако това предположение е вярно, обзалагам се, че има друг ред в таблицата, където qty
има нечислови данни в него.
SQL е език, базиран на набори, така че Oracle (или всяка друга база данни) е напълно свободна да оценява нещата в какъвто ред намери за добре. Това означава, че Oracle е напълно свободен да оцени to_number(qty)
израз, преди да приложите id=12345
предикат. Ако случайно Oracle срещне ред, където qty
стойността не може да се преобразува в число, ще изведе грешка.
Възможно е също така да има някои нечислови данни в конкретния ред, където id = 12345
които случайно не се показват (контролни знаци например). Можете да проверите това, като изпълните заявката
SELECT dump(qty, 1016)
FROM my_table
WHERE id = 12345
(ако искате десетичен вместо шестнадесетичен, използвайте 1010 като втори параметър за dump
) и проверка дали има нещо неочаквано в данните.