Как сравнить дату с системной датой в оракуле 11g с ограничением проверки?

Я пытался создать ограничение, которое проверяет, что дата ввода пользователя равна системной дате в ORACLE 11G.

CREATE TABLE  ABHISHEK(DOB DATE DEFAULT SYSDATE NOT NULL, NAME VARCHAR2(30));

Это моя структура таблицы.

ALTER TABLE ABHISHEK ADD CONSTRAINT check_dob CHECK ('DOB' = 'SELECT SYSDATE 
FROM dual');

Я попробовал это, чтобы сравнить. К сожалению, это не сработало для меня.

INSERT INTO ABHISHEK (DOB, NAME) VALUES('30-APR-19','ABHI');

После выполнения этой команды появилась ошибка, показывающая, что ORA-02290: ограничение проверки (SYSTEM.CHECK_DOB) нарушено.

Я ожидаю, что после выполнения команды вставки должна отображаться одна вставленная строка.


person Creator    schedule 30.04.2019    source источник


Ответы (1)


Вы не можете использовать sysdate в проверочном ограничении, так как оно недетерминировано. Список ограничений см. в документации. при создании контрольного ограничения.

Вместо этого вы можете создать триггер, но вам, вероятно, потребуется использовать trunc(sysdate) для сравнения даты с 00:00:00 текущего дня, например:

create trigger your_trigger
before insert or update on your_table
for each row
begin
  if trunc(:new.dob) != trunc(sysdate) then
    raise_application_error(-20001, 'DOB must be today''s date');
  end if;
end your_trigger;
/
person Boneist    schedule 30.04.2019