Apex审核日志 - 插入查询

时间:2015-04-21 08:04:45

标签: sql oracle oracle-apex

我正在创建一个自定义审核日志,作为我开发的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 被取消时,上面的代码工作正常,我不知道我在哪里出错了?

任何指导都会很棒。谢谢!

3 个答案:

答案 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)