Как сравнить дату с системной датой в Oracle 11g с проверкой ограничения? - PullRequest
1 голос
/ 30 апреля 2019

Я пытался создать ограничение, которое проверяет, что дата ввода пользователя равна системной дате в 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) нарушена.

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

1 Ответ

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

Нельзя использовать 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;
/
...