如何使用检查约束将日期与 oracle 11g 中的系统日期进行比较?

How to compare date with system date in oracle 11g with check constraint?

我试图创建一个约束来检查用户输入日期是否等于 ORACLE 11G 中的系统日期。

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

这是我的 table 结构。

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) 已违反。

我希望在执行插入命令后它必须显示插入的一行。

您不能在检查约束中使用 sysdate,因为它是不确定的。有关创建检查约束时的限制列表,请参阅 the documentation

相反,您可以创建触发器,但您可能需要使用 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;
/