Sql 停止未来日期约束oracle
我有一个customer表,不想添加以下约束Sql 停止未来日期约束oracle,sql,oracle,Sql,Oracle,我有一个customer表,不想添加以下约束 ALTER TABLE Customer ADD CONSTRAINT dateOfBirth CHECK(dateOfBirth <= sysdate); ALTER TABLE Customer ADD CONSTRAINT dateOfBirth CHECK(dateOfBirth正如@GordonLinoff所说,您不能将约束与非确定性函数一起使用。您可以创建触发器 CREATE TRIGGER trg_no_future_birth
ALTER TABLE Customer ADD CONSTRAINT dateOfBirth CHECK(dateOfBirth <= sysdate);
ALTER TABLE Customer ADD CONSTRAINT dateOfBirth CHECK(dateOfBirth正如@GordonLinoff所说,您不能将约束与非确定性函数一起使用。您可以创建触发器
CREATE TRIGGER trg_no_future_births
BEFORE INSERT ON customer
FOR EACH ROW
BEGIN
IF( :new.dateOfBirth > sysdate )
THEN
RAISE_APPLICATION_ERROR( -20001, 'Date of birth cannot be in the future.' );
END IF;
END;
Oracle不允许在check
约束中使用易失性函数。我认为您必须使用触发器。正如@GordonLinoff所提到的,不允许此活动。以下是概述规则的文档:;特别是:如果应用于相同的值,搜索条件必须始终返回相同的值。因此,它不能包含以下任何一项:动态参数(?);日期/时间函数(当前\u日期、当前\u时间、当前\u时间戳);子查询;用户函数(如用户、会话\u用户、当前\u用户)