2012-03-26 23 views
0

Ich habe zwei Tabellen:Update-Trigger mit mysql

Sales_Order

Order_ID  Buyer_ID  Emp_ID  Status (ENUM) 
    1    2   3   P 

Sales_Order_Details

Detail_ID  Order_ID  Quantity Item_ID  Balance 
    1    1   10   3   10 
    2    1   20   6   5 

ich einen Trigger erstellen bin versucht, die für Updates auf der Sales_Order_Details Tabelle schaut und sieht, dass Wenn sich der Saldo einer Detail-ID ändert, sucht er nach dem gesamten Saldo mit der gleichen Bestell-ID, und wenn alle alle 0 lauten, ändert sich der Status dieser Bestellung in der Sales_Order-Tabelle in "C".

Ich bin neu Auslöser und habe ein paar Dinge gelesen, aber ich bin ziemlich verwirrt bei der Verwendung von ihnen.

CREATE TRIGGER flag_order_complete AFTER UPDATE ON Sales_Order_Details 
FOR EACH ROW 
BEGIN 
IF Balance = '0' THEN 
UPDATE Sales_Order SET Status 'C' where Order_ID = old.Order_ID 
END 

Jetzt ist das wahrscheinlich schrecklich falsch. Es wäre toll, wenn mir jemand helfen könnte!

Antwort

1

Nun, es gibt einige offensichtliche syntaktische Probleme. Man könnte so etwas wie dies versucht:

CREATE TRIGGER flag_order_complete AFTER UPDATE ON Sales_Order_Details 
FOR EACH ROW 
BEGIN 
    DECLARE total_balance INT(10); 

    SELECT SUM(Balance) INTO total_balance 
    FROM Sales_Order_Details 
    WHERE Order_ID = new.Order_ID; 

    IF (total_balance = 0) THEN 
    UPDATE Sales_Order SET Status = 'C' where Order_ID = new.Order_ID; 
    END IF; 
END; 

Was dies bezieht sich nicht auf die Tatsache, dass einzelne Zeilen in Sales_Order können wegen der FOR EACH ROW Klausel mehrmals aktualisiert werden (zB wenn zwei Zeilen mit demselben Order_ID aktualisiert werden Gleichzeitig wird der übereinstimmende Datensatz in Sales_Order zweimal aktualisiert, wenn der Gesamtsaldo Null ist). Sie können eine kompliziertere Abfrage mit einem Cursor schreiben, der über die aktualisierten Datensätze schleift, um dies zu vermeiden.

+0

Danke dafür, neu zu Auslösern zu sein, könntest du mich bitte zu einer korrekten Web site führen (wenn du irgendwelche weißt), damit ich es nachlesen kann. – Namit