首页 > 解决方案 > sysdate 正确时如何将值插入表中

问题描述

当 sysdate 正确时,如何将值插入表中。这是我拥有的代码,但 stat 字段保持空白

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;

标签: oracleoracle11goracle-apexoracle-apex-5.1

解决方案


如果您验证apex_application.g_f0x是正确的(即表示您认为它们正确的列 - 如果不是,请在浏览器中使用检查元素),那么最可疑的情况是:

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)

asTRUNC函数删除了时间部分,因此您只比较日期。请注意,第二个选项防止在列上使用索引(如果存在)OUTGOINGDATE;如果表包含的行不多,它不会导致问题,但如果表很大,则可能(并且可能会)。不过,有一种解决方法 - 例如,您可以使用,

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

如果不是这种情况,请检查OUTGOINGDATE列的值并采取相应措施。如果您不确定该怎么做,请提供更多信息。


推荐阅读