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

Chamando a função Oracle PL SQL do Excel VBA


Seu trabalho com datas está totalmente incorreto. É difícil apontar o lugar exato porque existem alguns lugares em potencial. Vou explicar o que há de errado com este pedaço de código (é retirado da sua declaração "linha 89"):
... FP_BASIC_BD."DATE">=TO_CHAR(TRUNC(TO_DATE(GTT_DWM_STATS.CLOSINGDATE,'DD-MON-YY'), 'IW'),'DD-MON-YY') ...

GTT_DWM_STATS.CLOSINGDATE tem formato de data (de acordo com sua instrução DDL). Mas to_date função recebe uma string como primeiro parâmetro. Nesse local, a Oracle faz o seguinte:
  • converte implicitamente a data em string (usando o formato da sessão)
  • então to_date função tenta convertê-lo de volta em uma data, tratando a string como uma data escrita em 'DD-MON-YY' formato
  • então trunc trunca a data
  • então to_char converte novamente em uma string, e então você compara sua string com a data (eu acho) FP_BASIC_BD."DATE"
  • se FP_BASIC_BD."DATE" é uma data, o Oracle converte implicitamente o resultado da expressão à direita do sinal de igual novamente em uma data
  • ou se FP_BASIC_BD."DATE" é uma string, o Oracle compara strings de acordo com as regras de uma comparação de strings.

O que você precisa aqui é se livrar de todas as transformações desnecessárias:
FP_BASIC_BD."DATE" >= TRUNC(GTT_DWM_STATS.CLOSINGDATE, 'IW')

E depois disso você tem que verificar cuidadosamente todas as outras declarações onde você está trabalhando com datas. Se uma função pega uma data como parâmetro de entrada, você tem que passar uma data, se uma função pega uma string - passe uma string. O mesmo com as comparações:compare uma string com uma string e uma data com uma data.