sql >> Database >  >> RDS >> Oracle

Oracle PL SQL-functie aanroepen vanuit Excel VBA

Je werk met datums is totaal onjuist. Het is moeilijk om de exacte plaats aan te wijzen, omdat er enkele potentiële plaatsen zijn. Ik zal uitleggen wat er mis is met dit stukje code (het is overgenomen uit je "regel 89"-statement):

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

GTT_DWM_STATS.CLOSINGDATE heeft een datumnotatie (volgens uw DDL-verklaring). Maar to_date functie neemt een string als eerste parameter. Op deze plaats doet Oracle het volgende:

  • converteert impliciet datum naar tekenreeks (in de sessie-indeling)
  • vervolgens to_date functie probeert het weer om te zetten in een datum en behandelt de string als een datum geschreven in 'DD-MON-YY' formaat
  • vervolgens trunc kapt de datum af
  • vervolgens to_char zet het weer om in een string, en dan vergelijk je je string met de datum (denk ik) FP_BASIC_BD."DATE"
  • if FP_BASIC_BD."DATE" een datum is, zet Oracle impliciet het resultaat van de uitdrukking rechts van het gelijkteken weer om in een datum
  • of als FP_BASIC_BD."DATE" is een string, Oracle vergelijkt strings volgens de regels van een stringvergelijking.

Wat je hier nodig hebt, is om alle onnodige transformaties kwijt te raken:

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

En daarna moet je alle andere overzichten waar je met datums werkt goed controleren. Als een functie een datum als invoerparameter heeft, moet u een datum doorgeven, als een functie een string nodig heeft - geef een string door. Hetzelfde geldt voor vergelijkingen:vergelijk een string met een string en een datum met een datum.




  1. Mysqldump uitvoeren vanuit een PHP-script werkt niet, maar werkt op SSH

  2. MySQLi voorbereide verklaringen foutrapportage

  3. Wijzig div volgens geselecteerde vervolgkeuzelijsten

  4. Wat is de beste manier om verbinding te maken tussen Android en Oracle-database?