我正在创建一个自定义审核日志,作为我开发的Apex应用程序中的一个过程。
以下是用户在使用应用程序时记录用户操作的代码。 LOGON_DT和LOGOFF_DT只需要采用日期格式。但是,QUERY_SEARCH_TIME需要时间。
INSERT INTO AUDIT_LOG
(USERNAME, ORDER_NO, ORDER_NAME, CUSTOMER_NAME, LOGON_DT, LOGOFF_DT, QUERY_SEARCH_TIME)
VALUES
(:APP_USER, :P10_ORDER_NO, :P10_ORDER_NAME, :P10_CUSTOMER_NAME, SYSDATE, SYSDATE,
SYSDATE(HH24:MI:SS));
当 HH24:MI:SS 被取消时,上面的代码工作正常,我不知道我在哪里出错了?
任何指导都会很棒。谢谢!
答案 0 :(得分:0)
Oracle拥有自己的DATE数据类型的内部表示。您无法以您尝试的方式指定其格式。
通常在检索时应用日期格式,您可以通过在转换为字符串时应用适当的格式掩码来执行此操作。
TO_CHAR(QUERY_SEARCH_TIME, 'HH24:MI:SS')
答案 1 :(得分:0)
DATE
列已捕获时间组件。可能没有必要切断它。如果你这样做,你不需要DATE
列,因为这样的列总是会捕获整个日期,如果你只想要时间,那将是什么意思。
要显示日期的时间组件,您必须对其应用格式掩码:
TO_CHAR(SYSDATE, 'HH24:MI:SS')
。如果您想捕获该时间,那么将列的数据类型更改为适用于您应用的格式掩码的足够长度的VARCHAR2
类型。
在此处阅读datetime数据类型:Oracle documentation on datetime types
在此处阅读日期时间格式模型:Oracle documentation on format models
答案 2 :(得分:0)
如果您需要时间部分日期仅用于输出,您可以使用Tom的答案,但如果您确实只需要存储时间部分,则可以将其计算为
sysdate - trunc(sysdate)