2012-02-29 45 views
0

嗨,大家好,我需要在ORACLE 10g中创建一个触发器,它确保在birthDate之前的deathDate无法输入。我真的很苦恼,请你能提供支持,谢谢你仁慈的人。协助创建一个触发器

我的方案是:

Actor (actorID, lastName, firstName, middleName, suffix, gender, birthDate, deathDate) 
Movie (movieID, title, year, company, totalNoms, awardsWon, DVDPrice, discountPrice) 
Quote (quoteID, quote) 
Role (roleID ,roleName ,gender ,actorID* ,movieID*) 
RoleQuote (roleID*, quoteID*) 

谢谢

如果有任何更多的信息,你需要请咨询

我的关系约束是:

CONSTRAINT_NAME    C             
------------------------------ -             
QUOTE_FK      R             
ROLE_FK      R             
MOVIE_ROLE_FK     R             
ACTOR_ROLE_FK     R             
ACTORID      P             
MOVIEID      P             
QUOTEID      P             
ROLEID       P             
ROLEQUOTEID     P  

Relationships: 

ALTER TABLE Role ADD CONSTRAINT ACTOR_ROLE_FK FOREIGN KEY (actorID) REFERENCES Actor (actorID); 
ALTER TABLE Role ADD CONSTRAINT MOVIE_ROLE_FK FOREIGN KEY (movieID) REFERENCES Movie (movieID); 
ALTER TABLE RoleQuote ADD CONSTRAINT Role_FK FOREIGN KEY (roleID) REFERENCES Role (roleID); 
ALTER TABLE RoleQuote ADD CONSTRAINT Quote_FK FOREIGN KEY (quoteID) REFERENCES Quote (quoteID); 
+0

你尝试过这么远吗? [P.S ...](http://www.techonthenet.com/oracle/triggers/index.php) – Ben 2012-02-29 23:56:23

+0

我将发布: CREATE TRIGGER death_date_not_valid BEFORE birthDate user1137472 2012-02-29 23:59:18

+0

我不知道这是正确的,但它是我试过的 – user1137472 2012-02-29 23:59:51

回答

5

那种的约束应该作为一个CHECK con来实现straint

ALTER TABLE actor 
    ADD CONSTRAINT chk_birth_before_death CHECK(birthDate < deathDate); 

如果你真的需要约束与触发器执行(这将是慢,需要更多的工作)

CREATE OR REPLACE TRIGGER check_death_date 
    AFTER INSERT OR UPDATE ON actor 
    FOR EACH ROW 
BEGIN 
    IF(:new.birthDate > :new.deathDate) 
    THEN 
    RAISE_APPLICATION_ERROR(-20001, 'Birth date cannot be later than death date.'); 
    END IF; 
END; 
+0

非常感谢你我会试试这个,让你知道上帝保佑你 – user1137472 2012-03-01 00:11:22

+0

我需要添加alter table吗?或者我可以运行触发器,谢谢 – user1137472 2012-03-01 00:13:32

+0

@ user1137472 - 您可以创建约束,也可以创建触发器。两者都没有意义。我强烈的偏好是使用约束而不是使用触发器来强制执行此规则。 – 2012-03-01 00:15:27