сохранение данных со временем в столбце базы данных - PullRequest
1 голос
/ 13 июля 2020

из пользовательского интерфейса, когда я отправляю date, затем в database я вижу date without timestamp. Когда я делаю

alter session set nls_date_format = 'DD-MON-YYYY HH24:MI:SS'

, я также вижу timestamp. Но это специфика сеанса c. Я хочу, чтобы это изменение было постоянным.

Я хочу timestamp постоянно в базе данных вместе с date. в файле журнала отображается только дата, но не время.

какие изменения мне нужно сделать в database? Есть ли проблема в моем понимании

1 Ответ

2 голосов
/ 13 июля 2020

То есть для всей базы данных и для всех пользователей? Поговорите со своим администратором баз данных, они должны это знать. Это будет параметр инициализации nls_date_format.

В качестве альтернативы создайте триггер базы данных after logon, который изменит это значение, например,

SQL> show user
USER is "SYS"
SQL> create or replace trigger trg_dflt_date_format
  2    after logon on database
  3  begin
  4    execute immediate q'[alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss']';
  5  end;
  6  /

Trigger created.

Какой текущий формат?

SQL> select sysdate from dual;

SYSDATE
--------
13.07.20

ОК, выйдите из системы и войдите снова:

SQL> exit
Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

C:\temp>sqlplus scott/tiger

SQL*Plus: Release 11.2.0.2.0 Production on Pon Srp 13 16:55:08 2020

Copyright (c) 1982, 2014, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL> select sysdate from dual;

SYSDATE
-------------------
13.07.2020 16:55:12

SQL>

Выглядит нормально.

Однако: topi c заголовок говорит:

сохранение данных со временем в столбце базы данных

Если вы не «удалите» компонент времени (например, усекая значение, например trunc(sysdate)), Oracle сохранит дату и время. Именно так вы отображаете это.

Один вариант - использовать alter session (как вы уже знаете), другой - использовать функцию to_char с желаемой маской формата, например

SQL> select to_char(sysdate, 'hh24:mi:ss yyyy-mm-dd') right_now from dual;

RIGHT_NOW
-------------------
16:59:29 2020-07-13

SQL>
...