2015-04-21 2 views
0

Я создаю собственный журнал аудита как процесс в приложении Apex, которое я разработал.Apex Audit log - Insert Query

Ниже приведен код, который я использовал для регистрации действий пользователя при использовании приложения. 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 снимается, и я не знаю, где я буду неправильно с этим?

Любое руководство будет замечательным. Спасибо!

+1

Вы хотите получить только временную составляющую 'SYSDATE'? Каков тип данных столбца 'QUERY_SEARCH_TIME'? – Tom

+0

Да, мне нужна только временная компонента 'SYSDATE'. Тип данных 'QUERY_SEARCH_TIME' -' DATE DEFAULT SYSDATE'. – tinlin28

ответ

0

У Oracle есть собственное внутреннее представление для типа данных DATE. Вы не можете диктовать свой формат так, как вы пытаетесь.

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

TO_CHAR(QUERY_SEARCH_TIME, 'HH24:MI:SS') 
+0

Спасибо @ Drumbeg! – tinlin28

0

Столбец DATE уже фиксирует компонент времени. Возможно, нет необходимости отключать его. И если вы это сделаете, вам не нужен столбец DATE, так как такой столбец всегда будет фиксировать целую дату, и какой смысл, если вы хотите только время. Чтобы визуализировать компонент времени даты, вы должны применить к нему маску формата: TO_CHAR(SYSDATE, 'HH24:MI:SS'). Если вы хотите записать именно это, время, затем измените тип данных столбца на VARCHAR2 тип достаточной длины для маски формата, которую вы применяете.

Читайте на даты и времени типов данных здесь: Oracle documentation on datetime types
Читать на модели формата даты и времени здесь: Oracle documentation on format models

+0

Спасибо @ Тома, это было очень полезно. – tinlin28

0

Если вам нужно время часть даты только для вывода, вы можете использовать ответ Тома, но если вам действительно нужно чтобы сохранить только часть времени, вы можете рассчитать ее как

sysdate - trunc(sysdate)