Sql 停止未来日期约束oracle

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

我有一个customer表,不想添加以下约束

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用户)