Сравните дату с триггером на Oracle SQL - PullRequest
0 голосов
/ 26 июня 2018

У меня есть таблица с этими столбцами:

  • DateDebVal DATE
  • DateFinVal DATE
  • isCurrent NUMBER

И мне нужноиметь триггер, который делает что-то вроде этого:

CREATE TRIGGER check_date
AFTER INSERT OR UPDATE ON tablename
FOR EACH ROW
BEGIN
        IF sysdate < DateFinVal
             set isCurrent = 1
        ELSE
             set isCurrent = 0
END;

Могу ли я сравнить эти даты?Это хорошая идея использовать триггер вместо представления или процедуры?

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Sysdate и DateFinVal имеют тип DATE, так что вы бы сравнили их. Это зависит от того, зачем вам нужен этот триггер.

0 голосов
/ 26 июня 2018

Сроки можно абсолютно сравнить, но назначение выполняется с использованием := в PL / SQL (не с set)

Если вы хотите изменить значение новой вставленной строки, вы должны использовать триггер BEFORE:

CREATE TRIGGER check_date
BEFORE INSERT OR UPDATE ON tablename
FOR EACH ROW
BEGIN
  IF sysdate < :new.datefinval
    :new.iscurrent := 1;
  ELSE
    :new.iscurrent := 0;
  END IF;
END;
/

Онлайн пример: https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=796347f1b5811448dddf2d0a532c2c2c

...