sql >> Databáze >  >> RDS >> Oracle

Volání funkce Oracle PL SQL z Excelu VBA

Vaše práce s daty je zcela nesprávná. Je těžké určit přesné místo, protože existuje několik potenciálních míst. Vysvětlím, co je špatného na tomto kousku kódu (je převzat z vašeho příkazu „řádek 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 má formát data (podle vašeho výpisu DDL). Ale to_date funkce bere řetězec jako první parametr. Na tomto místě Oracle provede následující:

  • implicitně převádí datum na řetězec (pomocí formátu relace)
  • poté to_date funkce se jej pokusí převést zpět na datum, přičemž zachází s řetězcem jako s datem zapsaným v 'DD-MON-YY' formát
  • poté trunc zkrátí datum
  • poté to_char převede jej znovu na řetězec a poté svůj řetězec porovnáte s datem (myslím) FP_BASIC_BD."DATE"
  • pokud FP_BASIC_BD."DATE" je datum, Oracle implicitně převede výsledek výrazu napravo od rovnítka opět na datum
  • nebo pokud FP_BASIC_BD."DATE" je řetězec, Oracle porovnává řetězce podle pravidel porovnávání řetězců.

Co zde potřebujete, je zbavit se všech zbytečných transformací:

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

A poté musíte pečlivě zkontrolovat všechny ostatní výpisy, kde pracujete s daty. Pokud funkce bere datum jako vstupní parametr, musíte předat datum, pokud funkce bere řetězec - předejte řetězec. Totéž s porovnáním:porovnejte řetězec s řetězcem a datum s datem.




  1. Upravte pole CSV při importu do mysql

  2. Vysoká numerická přesnost plave s MySQL a SQLAlchemy ORM

  3. Existuje způsob, jak používat Linq to Oracle

  4. htaccess přesměrování nedokončená úloha