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.