Oracle: Trigger definieren für Update

Hallöchen,
ich bräuchte mal eine kurze Hilfe, wie man am besten einen Trigger in
Oracle aufbaut.

Und zwar müßte der „feuern“, wenn die Spalte „BEZAHLT“ von „N“ in „Y“ geändert wird.
Die Tabelle, auf die der Trigger laufen soll ist ziemlich groß und es können durch einen anderen Prozess leicht mal 100 Datensätze in der Spalte „BEZAHLT“ geändert werden.

Hat hier jemand einen performanten Vorschlag?

Danke und Gruß

Sina

Auch hallo.

ich bräuchte mal eine kurze Hilfe, wie man am besten :einen
Trigger in
Oracle aufbaut.

Welche Version ? Aber ein bischen was zum Lesen: http://www.muniqsoft.de/tipps/plsql/plsql.htm#Trigger
Oder hier (Oracle 9i): fies-und-gemein.de/down/BA_PLSQL.ppt

HTH
mfg M.L.

Hallöchen,
ich bräuchte mal eine kurze Hilfe, wie man am besten einen
Trigger in
Oracle aufbaut.

Und zwar müßte der „feuern“, wenn die Spalte „BEZAHLT“ von „N“
in „Y“ geändert wird.
Die Tabelle, auf die der Trigger laufen soll ist ziemlich groß
und es können durch einen anderen Prozess leicht mal 100
Datensätze in der Spalte „BEZAHLT“ geändert werden.

Hallo,

so gehts:

CREATE TRIGGER zahlen\_bitte 
BEFORE 
UPDATE OF bezahlt
ON ja\_wie\_heist\_die\_tabelle\_denn
FOR EACH ROW
WHEN (OLD.bezahlt != 'Y' AND :NEW.bezahlt = 'Y')
BEGIN
-- jetzt kommt die Prozedur
END;
/

Ich setze voraus, dass der Trigger NICHT feuern soll, wenn ein INSERT mit bezahlt = ‚Y‘ gemacht wird.

Gruß

Peter

Hat hier jemand einen performanten Vorschlag?

Danke und Gruß

Sina

Hallo Peter,
das sieht genau so aus, wie ich das haben will, nur
leider bekomme ich einen Compilierungsfehler:

ORA-25000: invalid use of bind variable in trigger WHEN clause

Ich könnte die „WHEN“ Bedingung ja auch in Form einer
If-Anweisung in den Ausführungsblock schreiben. Aber hätte das Auswirkung auf die Laufzeit?

Gruß
Sina

so gehts:

CREATE TRIGGER zahlen_bitte
BEFORE
UPDATE OF bezahlt
ON ja_wie_heist_die_tabelle_denn
FOR EACH ROW
WHEN (OLD.bezahlt != ‚Y‘ AND :NEW.bezahlt = ‚Y‘)
BEGIN
– jetzt kommt die Prozedur
END;
/

Ich setze voraus, dass der Trigger NICHT feuern soll, wenn ein
INSERT mit bezahlt = ‚Y‘ gemacht wird.

Gruß

Peter

Hat hier jemand einen performanten Vorschlag?

Danke und Gruß

Sina

Hallo Sina,

ja, da ist ein Doppelpunkt vor dem NEW zuviel:
WHEN (OLD.beitrag != ‚Y‘ AND NEW.beitrag = ‚Y‘)

Der Vorteil der WHEN Bedingung ist, dass der Trigger erst gar nicht auslöst.

Gruß

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

1 Like

Hallo Peter,
es funktioniert!!!
Und wie schön fix das ist!!
Ich glaube ich sattel um auf Trigger und Stored Procedures.

-)

Danke
Sina

Hallo Sina,

dann solltest Du dir das Buch von Feuerstein: Oracle PL/SQL Programmierung (O’Reilley) anschaffen. Da steht so ziemlich alles über Oracle Prozeduren und Trigger drin.

Gruß

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Peter,
ja, das werde ich mir gleich besorgen.

Gruß
Sina