Помощь в создании триггера - PullRequest
0 голосов
/ 01 марта 2012

Привет, ребята, мне нужно создать триггер в ORACLE 10g, который гарантирует, что не может быть введен 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);

1 Ответ

5 голосов
/ 01 марта 2012

Такое ограничение должно быть реализовано как CHECK ограничение

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