SQL orcl10g触发器插入(出生日期后的死亡日期)

SQL orcl10g触发器插入(出生日期后的死亡日期),sql,oracle,triggers,oracle10g,Sql,Oracle,Triggers,Oracle10g,触发器需要在输入出生日期之前停止死亡日期 CREATE TRIGGER Check_deathDate BEFORE INSERT Or UPDATE of deathDate on Actor FOR EACH ROW DECLARE deathDate DATE; birthDate DATE; deathDate_Error EXCEPTION; IF (deathDate < birthDate) THEN RAISE deathDa

触发器需要在输入出生日期之前停止死亡日期

CREATE TRIGGER Check_deathDate
BEFORE INSERT Or UPDATE of deathDate on Actor
FOR EACH ROW
DECLARE
deathDate           DATE;
birthDate           DATE;
deathDate_Error     EXCEPTION;
IF (deathDate < birthDate) THEN
RAISE deathDate_Error;
END IF;
EXCEPTION 
WHEN deathDate_Error THEN
Raise_application_error( 'deathDate' || 'should be before' || 'birthDate');
END;);
创建触发器检查\u死亡日期
在参与者上插入或更新死亡日期之前
每行
声明
死亡日期;
出生日期;
死亡日期\错误异常;
如果(死亡日期<出生日期),则
提出死亡日期错误;
如果结束;
例外
当死亡日期出错时
Raise|U应用程序|U错误('deathDate'| |'应该在'birthDate'之前);
完);;
给出错误

* 第3行错误: ORA-04079:触发器规范无效

…我还可以如何指定IF?

类似以下内容:

CREATE TRIGGER Check_deathDate
BEFORE INSERT Or UPDATE of deathDate, birthDate on Actor
FOR EACH ROW
BEGIN
    IF (:NEW.deathDate < :NEW.birthDate) THEN
        Raise_application_error(-20000, 'deathDate should be before birthDate');
    END IF;
END;
/
创建触发器检查\u死亡日期
在插入或更新演员的死亡日期、出生日期之前
每行
开始
如果(:NEW.death日期<:NEW.birthDate),则
提出申请错误(-20000,‘死亡日期应在出生日期之前’);
如果结束;
终止
/

您可能希望使用检查约束而不是触发器。约束不如触发器强大,但它们通常更简单、更快

alter table actor add
constraint actor_birth_before_death check (birthDate <= deathDate);
alter table actor add

约束演员出生前死亡检查(出生日期+1,比触发器好得多)(谢谢编辑btw)