2009-07-08 5 views
0

J'ai obtenu deux tables Product (Productname VARCHAR (10), Rating REAL) et Review (RatingID INT, Nom de produit VARCHAR (10), Rating INT). La notation du produit est la moyenne de toutes les notes données dans les commentaires pour ce produit spécifique.
J'aimerais avoir un déclencheur, qui met à jour un produit chaque fois qu'une nouvelle critique est insérée ou mise à jour, mais je ne peux tout simplement pas comprendre comment le faire. Existe-t-il un équivalent db2 à inserted() de SQL Server?Un déclencheur DB2 pour calculer une moyenne dans une autre table

Mes excuses pour la question faible.

Répondre

4

DB2 Après Insert déclencheur:

CREATE TRIGGER NEW_REVIEW 
AFTER INSERT ON REVIEW 
    REFERENCING NEW AS N_ROW 
    FOR EACH ROW 
    UPDATE PRODUCT SET Rating = (
     Select AVG(Rating) 
     from Review 
     where ProductName = N_ROW.ProductName 
    ) 

Après mise à jour:

CREATE TRIGGER NEW_REVIEW 
AFTER UPDATE ON REVIEW 
    REFERENCING NEW AS N_ROW 
    FOR EACH ROW 
    UPDATE PRODUCT SET Rating = (
     Select AVG(Rating) 
     from Review 
     where ProductName = N_ROW.ProductName 
    ) 

Après suppression:

CREATE TRIGGER NEW_REVIEW 
AFTER DELETE ON REVIEW 
    REFERENCING OLD AS O_ROW 
    FOR EACH ROW 
    UPDATE PRODUCT SET Rating = (
     Select AVG(Rating) 
     from Review 
     where ProductName = O_ROW.ProductName 
    ) 

Découvrez CREATE TRIGGER statement pour des informations supplémentaires.

+0

Merci. Pas tout à fait correct cependant. La clause WHERE pour la mise à jour est manquante. – pmr

+0

Oups! Je n'ai pas vérifié le Q correctement. Vous avez également besoin d'un déclencheur de mise à jour. Je le posterai aussi. –

+1

C'est IMHO en fait l'un des rares cas d'utilisation parfaitement valables pour un déclencheur :-) –