Oracle
 sql >> база данни >  >> RDS >> Oracle

Извикване на Oracle PL SQL функция от Excel VBA

Работата ти с датите е тотално неправилна. Трудно е да се посочи точното място, защото има някои потенциални места. Ще обясня какво не е наред с тази част от кода (взет е от вашия оператор "ред 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 има формат на датата (според вашия DDL отчет). Но to_date функцията приема низ като първи параметър. На това място Oracle прави следното:

  • неявно преобразува датата в низ (използвайки формата на сесията)
  • след това to_date функцията се опитва да го преобразува обратно в дата, като третира низа като дата, написана в 'DD-MON-YY' формат
  • след това trunc съкращава датата
  • след това to_char го преобразува отново в низ и след това сравнявате своя низ с датата (предполагам) FP_BASIC_BD."DATE"
  • ако FP_BASIC_BD."DATE" е дата, Oracle преобразува неявно резултата от израз отдясно на знака за равенство отново в дата
  • или ако FP_BASIC_BD."DATE" е низ, Oracle сравнява низовете според правилата за сравнение на низове.

Това, от което се нуждаете тук, е да се отървете от всички ненужни трансформации:

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

И след това трябва да проверите внимателно всички други отчети, където работите с дати. Ако функция приема дата като входен параметър, трябва да подадете дата, ако функция приеме низ - подайте низ. Същото и със сравненията:сравнете низ с низ и дата с дата.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Инсталиране на GCC на Oracle Solaris 11

  2. Oracle Invoke REST Service от pl/sql

  3. Високо използване на пространство от crfclust.bdb

  4. Променете размера на имената на таблица/колона/индекс в oracle 11g или 12c

  5. Топ-N заявки и пагинация в Oracle