2012-02-18 10 views
0

トリガーは、生年月日が入力される前に死亡日付を停止する必要があります。SQL orcl10gトリガー挿入(deathDate after birthDate)

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:無効なトリガー仕様を

...他にどのように私はIFを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のおかげで) –

関連する問題