我正在尝试创建一个不允许未来年份日期的约束。我有这个:
ALTER TABLE PACIENTE ADD CONSTRAINT ck_FechaNacimiento
CHECK (FechaNacimiento<=current_date);
但我得到了error 02436
。
您不能创建非确定性约束。因此,您不能创建一个引用类似函数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;
我再次尝试了这个并且没有显示错误,顺便感谢一下:
ALTER TABLE EXAMENPACIENTE 添加约束 ExamenPaciente_FechaExamen_c1 CHECK (FechaExamen<='30-SEP-2013');
ALTER TABLE PACIENTE ADD CONSTRAINT ck_FechaNacimiento CHECK (FechaNacimiento<=SYSDATE);