Blz, Angelo ? Sim, já vi N vezes casos de erros de formato de datas : se eu ganhasse 1 real a cada vez que vejo isso, hoje estria mega-milionário.... O ponto que pega normalmente é que os asn... digo, os duhvelopers, Não Entendem que no RDBMS Oracle, ao CONTRÁRIO de outros SGBDs, rigorosamente Não Existe o conceito de formato de data próprio e obrigatório do banco : aquilo que vc informa no parâmetro NLS_DATE_FORMAT do database é simplesmente um DEFAULT, que só será usado SE e APENAS SE o client NÂO INFORMAR COISA ALGUMA, okdoc ? basta o client informar (até por default dele, digamos) um formato diferente do indicado no banco e CABUM, todo tipo de erro de format pode acontecer... Como evito isso ?? EXTREMAMENTE SIMPLES, vc INFORMA O FORMATO em todos os seus SQLs, tipo : SELECT colunas FROM tabela WHERE colunadata=TO_DATE('01/12/2018', 'DD/MM/YYYY') e NUNCA, DE JEITO NENHUM, fazer a EXTREMA ABOBRINHA de programar no aplicativo : SELECT colunas FROM tabela WHERE colunadata='01/12/2018' Okdoc ?? Simples assim... E INCLUSIVE, usando TO_DATE vc evita qquer chance de conversões de datatypes implícitas fazendo o índice não funcionar : https://use-the-index-luke.com/sql/where-clause/obfuscation/dates é um caso mas eu IMAGINARIA que TODO MUNDO já sabe disso a esta altura... O que fazer então se a tua Aplicação NÃO USA programação DEFENSIVA, e tem essa FRAQUEZA ABSURDA de ser dependente de fatores externos ao database ??? A melhor coisa seria acionar o Desenvolvedor e exigir correção do BUG (sim, imho isso é um BUG LÓGICO, causado por total Inadequação aos conceitos do RDBMS Oracle), mas enquanto isso não vem há alguns WORK-AROUNDs que vc pode usar :
a. não importa se a app roda na forma de um serviço windows, de uma página web ou seja do que for : NECESSARIAMENTE ela VAi conectar no banco de dados, certo ? Em tese então é possível vc escrever uma TRIGGER que dispare quando alguém loga no banco de dados e a trigger faz um ALTER SESSION SET NLS_DATE_FORMAT='formatodedatadesejado' : vide https://easyoradba.com/2013/02/14/change-nls_date_format-via-logon-triggers/ ou b. sim, em condições normais o software client Oracle ** RESPEITA ** as variáveis de ambiente que definem formatos de data, números, e várias outras coisas, variáveis essas que podem ser definidas OU no prompt de comando OU no Registry do Windows : porém no caso, como a app roda na forma de um serviço Windows, logicamente o serviço roda no startup do Windows, ANTES do registry ser aberto via de regra... Assim, ao invés do service Windows rodar diretamente o .EXE da aplicação, TALVEZ vc possa o fazer rodar um SHELL SCRIPT/.BAT , que seta as variáveis antes de chamar o executável : https://stackoverflow.com/questions/415409/run-batch-file-as-a-windows-service tem um exmeplo de como rodar um .BAT via service Windows... Até pode haver a chance de o .EXE que roda como service ter sido programado pra 'esperar' o Registry ser aberto, aí seria simplesmente um caso de setar a NLS_DATA_FORMAT na porção adequada do Registry : mas APENAS O FORNECEDOR (se é que ele sabe o que é um registry :^) é que pode confirmar ou negar essa possibilidade... ==>> MAS REPITO : o Certo, o Apropriado, o Recomendado é você Exigir que o fornecedor escreva os SQLs da Aplicação ** direito **, não dependendo NEM de formato de datas NEM de format de número NEM de linguagem.... []s Chiappa