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)