- This topic has 3 replies, 3 voices, and was last updated 2 years, 7 months ago by José Laurindo Chiappa.
-
AuthorPosts
-
22 de março de 2022 at 6:35 pm #153932gbaltarParticipant
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á.
23 de março de 2022 at 8:42 am #153933José Laurindo ChiappaModeratorTudo 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
25 de março de 2022 at 8:59 pm #154086MottaParticipantO 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” 🙂
26 de março de 2022 at 10:24 am #154092José Laurindo ChiappaModeratorBlz ? 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
-
AuthorPosts
- You must be logged in to reply to this topic.