Oracle
 sql >> Base de données >  >> RDS >> Oracle

Appel de la fonction Oracle PL SQL à partir d'Excel VBA

Votre travail avec les dates est totalement incorrect. Il est difficile de pointer l'endroit exact car il y a des endroits potentiels. Je vais vous expliquer ce qui ne va pas avec ce morceau de code (il est tiré de votre déclaration "ligne 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 a un format de date (selon votre instruction DDL). Mais to_date La fonction prend une chaîne comme premier paramètre. À cet endroit, Oracle effectue les opérations suivantes :

  • convertit implicitement la date en chaîne (en utilisant le format de la session)
  • puis to_date la fonction essaie de la reconvertir en une date, en traitant la chaîne comme une date écrite en 'DD-MON-YY' format
  • puis trunc tronque la date
  • puis to_char le convertit à nouveau en une chaîne, et que vous comparez votre chaîne avec la date (je suppose) FP_BASIC_BD."DATE"
  • si FP_BASIC_BD."DATE" est une date, Oracle reconvertit implicitement le résultat de l'expression à droite du signe égal en une date
  • ou si FP_BASIC_BD."DATE" est une chaîne, Oracle compare les chaînes selon les règles d'une comparaison de chaînes.

Ce dont vous avez besoin ici, c'est de vous débarrasser de toutes les transformations inutiles :

FP_BASIC_BD."DATE" >= TRUNC(GTT_DWM_STATS.CLOSINGDATE, 'IW')

Et après cela, vous devez vérifier attentivement toutes les autres déclarations où vous travaillez avec des dates. Si une fonction prend une date comme paramètre d'entrée, vous devez passer une date, si une fonction prend une chaîne - passez une chaîne. Même chose avec les comparaisons :comparez une chaîne avec une chaîne et une date avec une date.