erro oracle ORA-01722: número inválido

//estado é do tipo String, quando um decimal como "0.1" é passado, um erro de número inválido será reportado
and a.w_state = :state
porque o banco de dados Oracle está em andamentoQuando a conversão implícita do tipo de dados, se o parâmetro do tipo string puder ser convertido com sucesso em tipo numérico, a conversão de tipo será executada e comparada. Neste exemplo, '11' pode ser convertido corretamente em um número inteiro, portanto, nenhum erro será relatado e, se você definir o estado do parâmetro como '0,1' do tipo string, isso causará um erro de execução da instrução SQL, solicitando "ORA- 01722: número inválido".

Isso ocorre porque a comparação de igualdade é executada na instrução SQL e o banco de dados Oracle usa conversão implícita de tipo de dados por padrão,Todos os parâmetros são convertidos para o mesmo tipo que o tipo de campo da tabela antes da comparação. Como o tipo do campo w_state é numérico e o tipo do estado do parâmetro é uma string, ele não poderá realizar uma comparação correta e um erro será relatado.

おすすめ

転載: blog.csdn.net/qq_45699990/article/details/130604926