Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

A função TO_CHAR(número) retorna ORA-01722:número inválido


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.