我正在尝试创建一个不允许未来几年日期的约束。我有这个:
ALTER TABLE PACIENTE ADD CONSTRAINT ck_FechaNacimiento
CHECK (FechaNacimiento<=current_date);
但我得到了error 02436
。
答案 0 :(得分:4)
您无法创建非确定性约束。因此,您无法创建引用像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;
答案 1 :(得分:0)
我再次尝试过,并没有显示错误,谢谢你的方式:
ALTER TABLE EXAMENPACIENTE ADD CONSTRAINT ExamenPaciente_FechaExamen_c1 检查(FechaExamen&lt; ='30-SEP-2013');
答案 2 :(得分:-3)
ALTER TABLE PACIENTE ADD CONSTRAINT ck_FechaNacimiento CHECK (FechaNacimiento<=SYSDATE);