Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wywoływanie funkcji SQL Oracle PL z Excela VBA

Twoja praca z datami jest całkowicie niepoprawna. Trudno wskazać dokładne miejsce, ponieważ jest kilka potencjalnych miejsc. Wyjaśnię, co jest nie tak z tym fragmentem kodu (jest on wzięty z twojego „linii 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 ma format daty (zgodnie z wyciągiem DDL). Ale to_date funkcja przyjmuje ciąg znaków jako pierwszy parametr. W tym miejscu Oracle wykonuje następujące czynności:

  • domyślnie konwertuje datę na ciąg (używając formatu sesji)
  • następnie to_date funkcja próbuje przekonwertować go z powrotem na datę, traktując ciąg jako datę zapisaną w 'DD-MON-YY' format
  • następnie trunc skraca datę
  • następnie to_char konwertuje go ponownie na łańcuch, a następnie porównujesz swój łańcuch z datą (chyba) FP_BASIC_BD."DATE"
  • jeśli FP_BASIC_BD."DATE" jest datą, Oracle ponownie zamienia wynik wyrażenia po prawej stronie znaku równości na datę
  • lub jeśli FP_BASIC_BD."DATE" jest ciągiem, Oracle porównuje ciągi zgodnie z regułami porównywania ciągów.

To, czego potrzebujesz, to pozbyć się wszystkich niepotrzebnych przekształceń:

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

A potem musisz dokładnie sprawdzić wszystkie inne wyciągi, w których pracujesz z datami. Jeśli funkcja przyjmuje datę jako parametr wejściowy, musisz przekazać datę, jeśli funkcja przyjmuje ciąg - przekaż ciąg. To samo z porównaniami:porównaj ciąg z ciągiem i datę z datą.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. praca z json w Oracle

  2. JOOQ Dokładność liczb Oracle i mapowanie liczb w języku Java

  3. Jak obliczyć sumę wielu kolumn w Oracle

  4. Otrzymuj ORA-00933:polecenie SQL nie zostało poprawnie zakończone

  5. nieprawidłowa wartość parametru „katalog”