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

时间:2019-04-30 09:37:39

标签: oracle oracle11g check-constraints

我试图创建一个约束,以检查用户输入日期是否等于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 个答案:

答案 0 :(得分:1)

您不能在检查约束中使用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;
/