Как я могу вставить значение в таблицу, когда sysdate правильный - PullRequest
0 голосов
/ 29 января 2019

Как я могу вставить значение в таблицу, когда sysdate правильный .. Это код, который у меня есть, но поле статистики остается пустым

begin
  for idx in 1 .. apex_application.g_f01.count
  loop
    if apex_application.g_f01(idx) is not null then
      update outgoing 
      set STAT ='CONFIRM'
   WHERE FILENUMBER = APEX_APPLICATION.G_F01(IDX)
   AND DEPARTMENT = apex_application.g_f03(idx)
   and OUTGOINGDATE= sysdate
         ;
    end if;
  end loop;
end;

1 Ответ

0 голосов
/ 30 января 2019

Если вы убедились, что apex_application.g_f0x верны (то есть представляют столбцы, которые, как вы думаете, они делают - если нет, используйте inspect element в вашем браузере), то наиболее подозрительным условием будет следующее:

and OUTGOINGDATE = sysdate

SYSDATE - это функция, которая возвращает дату и время, например,

SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss';

Session altered.

SQL> select sysdate from dual;

SYSDATE
-------------------
29.01.2019 22:02:32

SQL>

Я сомневаюсь, что столбец OUTGOINGDATE содержит точно текущее значение даты / времени.Один из вариантов, который может это исправить, состоит в том, чтобы обрезать одно или оба значения, например

and OUTGOINGDATE = trunc(sysdate)

или

and trunc(OUTGOINGDATE) = trunc(sysdate)

, так как TRUNC функция удаляет времякомпонент, поэтому вы будете сравнивать только даты.Обратите внимание, что вторая опция запрещает использование индекса (если он существует) для столбца OUTGOINGDATE;это не вызовет проблем, если таблица содержит не так много строк, но может (и, вероятно, будет), если таблица большая.Однако есть обходной путь - вы бы использовали, например,

and outgoingdate >= trunc(sysdate)
and outgoingdate <  trunc(sysdate + 1)

Если это не так, изучите значения OUTGOINGDATE столбца и действуйте соответствующим образом.Если вы не знаете, что делать, предоставьте дополнительную информацию.

...