我试图创建一个约束,以检查用户输入日期是否等于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)被违反。
我希望执行插入命令后,它必须显示已插入的一行。
答案 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;
/