sql >> Database teknologi >  >> RDS >> Oracle

Kalder Oracle PL SQL-funktion fra Excel VBA

Dit arbejde med datoer er fuldstændig forkert. Det er svært at udpege et præcist sted, fordi der er nogle potentielle steder. Jeg vil forklare, hvad der er galt med dette stykke kode (det er taget fra din "linje 89"-sætning):

... FP_BASIC_BD."DATE">=TO_CHAR(TRUNC(TO_DATE(GTT_DWM_STATS.CLOSINGDATE,'DD-MON-YY'), 'IW'),'DD-MON-YY') ...

GTT_DWM_STATS.CLOSINGDATE har datoformat (ifølge din DDL-erklæring). Men to_date funktion tager en streng som en første parameter. På dette sted gør Oracle følgende:

  • konverterer implicit dato til streng (ved hjælp af sessionens format)
  • derefter to_date funktion forsøger at konvertere den tilbage til en dato, idet den behandler strengen som en dato skrevet i 'DD-MON-YY' format
  • derefter trunc afkorter datoen
  • derefter to_char konverterer den igen til en streng, og derefter sammenligner du din streng med datoen (jeg gætter på) FP_BASIC_BD."DATE"
  • hvis FP_BASIC_BD."DATE" er en dato, konverterer Oracle implicit resultatet af udtryk til højre for lighedstegn igen til en dato
  • eller hvis FP_BASIC_BD."DATE" er en streng, sammenligner Oracle strenge i henhold til reglerne for en strengsammenligning.

Hvad du har brug for her er at slippe af med alle unødvendige transformationer:

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

Og herefter skal du nøje tjekke alle andre udsagn, hvor du arbejder med datoer. Hvis en funktion tager en dato som inputparameter, skal du sende en dato, hvis en funktion tager en streng - videregive en streng. Det samme med sammenligninger:Sammenlign en streng med en streng og en dato med en dato.




  1. Hvordan får man landekode fra (intl-tel-input) plugin efter indsendelse af formularen?

  2. hvordan man undslipper input, men gemmer uescaped i databasen

  3. Brug af Bestil efter i kodetænder

  4. Skift Excel-datonummer til Oracle-dato