2012-02-18 44 views
0

觸發器需要在輸入生日日期之前停止死亡日期。SQL orcl10g觸發器插入(出生日期後的死亡日期)

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;); 

在3行給出了錯誤...

* ERROR: ORA-04079:無效觸發規範

...怎麼回事我可以specifiy中頻?

回答

2

事情是這樣的:

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; 
/
5

您可能需要使用檢查約束,而不是觸發的。約束不如觸發器強大,但它們通常更簡單快捷。

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

+1,比觸發器更好的方法(感謝編輯btw) – 2012-02-19 10:51:55