создать перед вставкой триггера, чтобы добавить sysdate + 30 минут в sql - PullRequest
0 голосов
/ 13 февраля 2019

у меня есть таблица со столбцом метки времени, которую я хочу добавить на каждую вставку, чтобы добавить текущую метку времени + 30 минут

как этого добиться с помощью Oracle 11g;

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Поскольку у вас есть столбец отметки времени, вероятно, лучше использовать systimestamp вместо sysdate и добавить интервал, а не дробь дня, что приведет к потере точности до доли секунды (и часового пояса, если ваш столбецна самом деле это тоже хранится).

Вы бы либо просто имели дату (если вы используете sysdate + 30/1440), либо неявно конвертировали в дату (если вы используете systimestamp + 30/1440);и в любом случае вы получите дату, которая затем неявно или явно преобразуется в метку времени, хранящуюся в вашем столбце.

В качестве простого примера использования интервала:

create table t42 (col1 number, col2 timestamp);

create trigger tr42
before insert on t42
for each row
begin
  :new.col2 := systimestamp + interval '30' minute;
end;
/

select systimestamp from dual;

SYSTIMESTAMP                     
---------------------------------
2019-02-13 07:17:11.971542000 GMT

insert into t42 (col1) values (42);

select col1, col2 from t42;

      COL1 COL2                         
---------- -----------------------------
        42 2019-02-13 07:47:12.253603000

Вы также можете использовать значение по умолчанию для столбца вместо триггера:

create table t42 (
  col1 number,
  col2 timestamp default systimestamp + interval '30' minute
);

select systimestamp from dual;

SYSTIMESTAMP                     
---------------------------------
2019-02-13 07:17:12.962268000 GMT

insert into t42 (col1) values (42);

select col1, col2 from t42;

      COL1 COL2                         
---------- -----------------------------
        42 2019-02-13 07:47:13.028670000

, хотя это позволяет человеку, выполняющему вставку, предоставить свое собственное значение:

insert into t42 (col1, col2) values (43, timestamp '2000-01-01 00:00:00.0');

select col1, col2 from t42;

      COL1 COL2                         
---------- -----------------------------
        42 2019-02-13 07:47:13.028670000
        43 2000-01-01 00:00:00.000000000

Триггер будет переопределять любое предоставленное пользователем значение (хотя его также можно изменить, но не на.)

Вы также можете использовать current_timestamp вместо systimestamp - , они делают немного разные вещи .

0 голосов
/ 13 февраля 2019

вы можете создать триггер, как показано ниже.это будет вставлять текущую метку времени + 30 минут каждый раз, когда вы вставляете строку в таблицу.

create or replace trigger before_insert
before insert 
  on table_name for each row
declare 
v_time date;
begin
select sysdate+30/1440 into v_time from dual;
:new.cur_time :=v_time;
end;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...