GPO ( Grupo de Profissionais Oracle )
A maior comunidade Oracle do Brasil !

Home Fóruns Banco Oracle Erro ORA 01722 – Invalid Number

Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #153932
    gbaltar
    Participante

    Boa tarde.

    Estou tendo um problema ao tentar realizar um comando de insert em um campo Data.

    Ao executar o comando abaixo, o programa retorna o erro ORA 01722 – Invalid Number.

     

    Insert into VISITA_SAS VALUES(sys_guid(),’CTIM’,’VF120′,’0006241981′,

    to_date(’22/03/2022 13:34:49′,’DD/MM/YYYY   HH24:MI:SS’), ‘20220322’, ’13:34:49′,

    to_date(’22/03/2022 13:34:49′, ‘DD/MM/YYYY  HH24:MI:SS’),

    to_date(’22/03/2022 13:38:05′,’DD/MM/YYYY  HH24:MI:SS’),

    ’00:03:16′,’2′,’SIM’,’NAO’,’S’,’SIM’,’NA’,’-5,080609′,’-42,856332′,’-5,12277′,’-42,8241967′,’-5,1229932′,’-42,8240876′,’NAO’,’SIM’,’NAO’,’5893′,’5920′)

    O curioso é que esse erro só ocorre quando é executado pela aplicação no servidor.

    Rodando a aplicação na minha máquina, ou executando o comando diretamente no SQL DEVELOPER, o erro não ocorre.

    Antes estava dando erro de Mês Inválido, coloquei o TO_DATE e esse formato que está no comando, e agora o erro é o erro ORA 01722 – Invalid Number.

     

    Alguém tem alguma idéia de como resolver o problema?

     

    Oriado desde já.

     

     

    #153933

    Tudo blz ? Então, COM CERTEZA ABSOLUTA vc está fazendo Conversão Implícita, ie, está passando uma STRING pra uma coluna não-string , numérica certamente dada a msg de erro  : plz VERIFIQUE CUIDADOSAMENTE o datatype de CADA COLUNA nessa tabela , e encontre a coluna que está implicando em conversão de dados…
    Eu, particularmente, APOSTARIA nessas daqui, tipo :

    ’-5,080609′,

    Se a coluna recebendo esse valor é numérica no banco de dados, AO MESMO TEMPO que É ABSURDO COMPLETO vc passar um número como string (SIM, absolutamente TUDO que está dentro de aspas É SIM UMA STRING) , ainda temos a questão que no SQL e no PL/SQL o caracter de decimal por padrão SEMPRE É PONTO, e Não vírgula…. Sendo isso, a correção MUITO SIMPLES seria vc passar no INSERT os números SEM ASPAS e com PONTO como indicador de decimal, tipo :

    … -5.080609, …

    ok ?? COM ISSO vc EVITA a conversão implícita que existe entre strings x coluna não-string….

    Abraços,

    José Laurindo Chiappa

    #154086
    Motta
    Participante

    O Sql Developer tem uma opção de parametrização da seção para formatos de data e números , pelo padrão , creio , vem no formato em “português” , quando o objeto roda na produção vai pelo “americano” , SEMPRE : 1 deixo o padrão do Tio Sam dara , números etc  , 2 mesmo assim SEMPRE informo o padrão de data e hora nas conversões 3 se o sql que tiver de formatar valores ou datas fazer as conversões neste  , mas o melhor e deixar para a aplicação.

    Neste caso vale o “na minha máquina roda” 🙂

    #154092

    Blz ? Sim, isso aí TUDO que vc falou sobre Formatação para Exibição de dados numéricos e datas tá absolutamente certo, é isso aí ….

    Na mensagem do colega, porém, como o erro dá num INSERT, eu acredito que a causa-raiz é que o colega lá que perguntou Não Segue no INSERT que ele mostrou pra gente os procedimentos de passagem de valores corretos : na linguagem SQL (e na PL/SQL também) TUDO que estiver dentro de aspas VAI ser considerado uma string, E se o destino (da coluna sofrendo o INSERT no caso) NÃO FOR string (é DATE ou NUMBER), VAI ACONTECER CONVERSÃO IMPLÍCITA….

    Para evitar isso, NO CASO EM QUESTÃO onde o erro é INVALID NUMBER e (apesar do colega não ter dito, SUPOMOS que a coluna é NUMBER) , eu simplesmente REMOVERIA as aspas do valor a inserir E usaria sempre ponto como indicador de decimal : PRONTO, com essa simples Ação o comando VAI PASSAR A FUNCIONAR SEMPRE, ** independente ** de settings da ferramenta e/ou do banco….

     

    Abraços,

     

    Chiappa

Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Você deve fazer login para responder a este tópico.