2016-05-15 6 views
0

Ich habe versucht, den folgenden Trigger zu erhalten, um den Preis basierend auf einem Diskontsatz zu aktualisieren, wenn dieser Tarif aktualisiert wird.Fehler beim Aktualisieren der Spalte mit Trigger in derselben Tabelle

create or replace trigger discount_change 
    before update on maintain 
    for each row 
begin 
    if :NEW.discount_rate != :OLD.discount_rate 
    then 
    update maintain m 
    set m.discount_price = :NEW.discount_rate * :OLD.price 
    where m.m_id = :NEW.m_id; 
    end if; 
end; 

Da es sich um eine Übung, diese sind in der gleichen Tabelle (leider) und wenn ich versuche, dies zu tun, bin ich konsequent die Störung zu erhalten:

table %s.%s is mutating, trigger/function may not see it

Ich habe diese Foren wurden Kämmen auf der Suche nach der Antwort und soweit ich recherchiert habe, sollte dies nicht diesen Fehler werfen, da ich nichts aus dem Tisch auswähle. Was mache ich hier falsch?

Antwort

0

würde ich vorschlagen, die Spalte discount_price als berechnete Spalte zu machen, so Auslöser für seine updation gibt es keine Notwendigkeit

+0

Wunsch zu definieren ist, ich könnte, aber das ist eine Übung, in der wir Trigger praktizieren werden sollen zu. Ich weiß, warum die Gründe für den Fehler, aber ich kann immer noch nicht herausfinden, wie ich es umgehen kann. – Syzorr