2016-05-22 13 views
0

Ich möchte Trigger, der Preis aus verschiedenen Tabellen zählt.Oracle-Trigger mit Verbindung zu verschiedenen Tabellen

Es sieht wie folgt aus:

PART_PRICE(from PARTS) + TIME(from PARTS) * SALARY_PER_HOUR(from MECHANIC) 

und das Ergebnis sollten die Tischreservierung enthält ID_PART und ID_MECHANIC mit PARTS & MECHANIC in PREIS (von Reservierungen), gespeichert werden.

Ich weiß wirklich nicht, wie es geht, können Sie mir helfen?

+4

[Legen Sie Business-Logik nicht in Auslöser] (http://stackoverflow.com/questions/34362598/trigger-cant-read-the-table-after-being-fired-by-the-same- Tabelle/34371316 # 34371316). Nein, ernsthaft, [ich meine es - [NICHT BUSINESS LOGIC IN TRIGGERS] (http://stackoverflow.com/questions/31998789/trigger-to-enforce-m-m-relationship/32009988#32009988)! –

Antwort

0

Zuerst Trigger sollte auf DDL-Anweisungen ausgelöst werden. Es ist nicht klar aus der Frage, auf welche Tabelle Änderungen Sie auslösen möchten. Wie bei Ihren Fragen denke ich, dass Sie die Preisspalte der Reservierungstabelle aktualisieren möchten, wenn es Änderungen in ID_PART oder ID_MECHANIC gibt. Bitte finden Sie den Code unten.

CREATE TRIGGER trgAfterUpdate AFTER UPDATE ON RESERVATIONS 
FOR EACH ROW 
AS 
    declare part_id int; 
    declare mechanic_id int; 
    declare time long; 
    declare part_price decimal(10,2); 
    declare mechanic_sal decimal(10,2); 

    if NEW.ID_PART <> OLD.ID_PART 
     part_price = select PART_PRICE from parts where id_part=new.id_part; 
     time = select TIME from parts where id_part=new.id_part; 
     mechanic_sal = select SALARY_PER_HOUR from mechanic where id_mechanic=old.id_mechanic; 
     update RESERVATIONS set PRICE = part_price+time*mechanic_sal where ID_PART=NEW.ID_PART and ID_MECHANIC=OLD.id_mechanic; 
    else if NEW.ID_MECHANIC <> OLD.ID_MECHANIC 
     part_price = select PART_PRICE from parts where id_part=old.id_part; 
     time = select TIME from parts where id_part=old.id_part; 
     mechanic_sal = select SALARY_PER_HOUR from mechanic where id_mechanic=new.id_mechanic; 
     update RESERVATIONS set PRICE = part_price+time*mechanic_sal where ID_PART=OLD.ID_PART and ID_MECHANIC=NEW.id_mechanic; 
GO 
Verwandte Themen