Как сделать ограничение CHECK, позволяющее пользователю вводить только DateTime с сегодняшнего дня и далее? - PullRequest
1 голос
/ 28 апреля 2019

Как и в случае с заголовком, я пытаюсь решить мое ограничение CHECK, когда пользователь может вводить дату и время только с сегодняшнего дня и далее .

Вот версия разработчика SQL, которую я сейчас использую (я запросил версию):
- Oracle Database 12c Enterprise Edition, выпуск 12.2.0.1.0 - 64-разрядная версия
- PL / SQL Release 12.2.0.1.0 - Производство

Что я пробовал:

ALTER TABLE job_assignment
    ADD CONSTRAINT chk_start_date CHECK ( start_date >=
    SYSDATE()
);

но это дало мне ошибку, ORA-00907: отсутствует правая скобка.

И я тоже сталкивался с этим,
Условия проверочных ограничений не могут содержать следующие конструкции:
- Подзапросы и скалярные выражения подзапросов
- вызовы функций, которые не являются детерминированными (CURRENT_DATE, CURRENT_TIMESTAMP, DBTIMEZONE, LOCALTIMESTAMP, SESSIONTIMEZONE, SYSDATE , SYSTIMESTAMP, UID, USER и USERENV)

Нужна помощь, пожалуйста.

Ответы [ 2 ]

1 голос
/ 28 апреля 2019

Это будет триггер, например

create or replace trigger trg_biu_jobas
  before insert or update on job_assignment
  for each row
begin
  if :new.start_date < sysdate then
     raise_application_error(-20001, 'Start date must be after "now"');
  end if;
end;
0 голосов
/ 28 апреля 2019

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

CREATE TRIGGER chk_date_today
BEFORE INSERT ON job_assignment
FOR EACH ROW
BEGIN
    IF (:NEW.start_date < SYSDATE()) THEN
        raise_application_error(-20001, 'start_date must be after now');
   END IF;
END;
...