SQL开发人员的未来日期

SQL开发人员的未来日期,sql,oracle,Sql,Oracle,我试图创建一个约束,不允许在未来几年中使用日期。我有这个: ALTER TABLE PACIENTE ADD CONSTRAINT ck_FechaNacimiento CHECK (FechaNacimiento<=current_date); ALTER TABLE PACIENTE ADD CONSTRAINT ck\u FechaNacimiento 检查(FechaNacimientoALTER TABLE PACIENTE添加约束检查(FechaNacimiento您不能创建

我试图创建一个约束,不允许在未来几年中使用日期。我有这个:

ALTER TABLE PACIENTE ADD CONSTRAINT ck_FechaNacimiento
CHECK (FechaNacimiento<=current_date);
ALTER TABLE PACIENTE ADD CONSTRAINT ck\u FechaNacimiento

检查(FechaNacimiento
ALTER TABLE PACIENTE添加约束检查(FechaNacimiento您不能创建非确定性约束。因此,您不能创建引用函数的约束,如每次调用时返回不同值的
current_date
sysdate

如果要强制执行这类操作,需要在表上创建一个触发器,如果违反业务规则,该触发器将抛出一个错误,即

CREATE OR REPLACE TRIGGER trg_paciente
  BEFORE INSERT OR UPDATE 
  ON paciente
  FOR EACH ROW
BEGIN
  IF( :new.FechaNacimiento > current_date )
  THEN
    RAISE_APPLICATION_ERROR( -20001, 'FechaNacimiento<=current_date must be in the past' );
  END IF;
END;
创建或更换触发器测试设备
在插入或更新之前
帕森特酒店
每行
开始
如果(:new.FechaNacimiento>当前日期)
然后

RAISE_APPLICATION_ERROR(-20001,'FechaNacimiento我用这个再试了一次,没有显示错误,顺便说一句,谢谢:

ALTER TABLE EXAMENPACIENT添加约束EXAMENPACIENT_FechaExamen_c1
检查(fechaexamen)使用
SYSDATE
函数会得到与使用
CURRENT\u DATE
相同的错误。这两种函数都是非确定性的,约束中不允许使用非确定性函数。
CREATE OR REPLACE TRIGGER trg_paciente
  BEFORE INSERT OR UPDATE 
  ON paciente
  FOR EACH ROW
BEGIN
  IF( :new.FechaNacimiento > current_date )
  THEN
    RAISE_APPLICATION_ERROR( -20001, 'FechaNacimiento<=current_date must be in the past' );
  END IF;
END;