Estou assumindo que
qty
é definido como um varchar2
em my_table
-- caso contrário, não haveria nenhum propósito ao chamar to_number
. Se essa suposição estiver correta, aposto que há alguma outra linha na tabela onde qty
contém dados não numéricos. SQL é uma linguagem baseada em conjuntos, então o Oracle (ou qualquer outro banco de dados) é perfeitamente livre para avaliar as coisas na ordem que achar melhor. Isso significa que a Oracle é perfeitamente livre para avaliar o
to_number(qty)
expressão antes de aplicar o id=12345
predicado. Se o Oracle encontrar uma linha em que o qty
value não pode ser convertido em um número, ele gerará um erro. Também é possível que haja alguns dados não numéricos na linha específica em que
id = 12345
que acontece de não estar exibindo (caracteres de controle, por exemplo). Você pode verificar isso executando a consulta SELECT dump(qty, 1016)
FROM my_table
WHERE id = 12345
(se você quiser decimal em vez de hexadecimal, use 1010 como o segundo parâmetro para
dump
) e verificando se há algo inesperado nos dados.