Trigger BeforeUpdate

hkProg

Benutzer
Beiträge
21
Hallo zusammen,

ich habe nach langer Zeit die Trigger entdeckt und bin natürlich irgendwann auf ein Problem gestoßen:

kurze Beschreibung:
der einzelne Datensatz wird über einen Button gespeichert, und ich gebe ihm einen Wert für den User (pUser) mit,
damit ich weiss, wer die letzte Änderung machte. Wird kein User angegeben, sollte er dummy eintragen.
Weiterhin erhöhe ich bei jeder Änderung das Feld updateCount. Dadurch will ich prüfen, ob zwischen einem Lesevorgang
und Schreibvorgang eines Users ein anderer User den Datensatz geändert hat.

Hierzu benutze ich folgenden Trigger, der auch so funktioniert:
(ich definiere diese mit Heidi-SQL, weshalb ich die Definitionen bezüglich Art des Triggers (Before Update)
und welche Tabelle betroffen ist nicht angeben muss

BEGIN
declare msg varchar(200);
declare pUser varchar(20);
declare pCount int;

set pCount = old.updateCount;

if new.updateCount <> old.updateCount and new.updateCount > 0 then
set msg = concat('Aktion abgebrochen ... Satz wurde zwischenzeitlich geändert!', ' Aktualisieren sie ihre Anzeige und versuchen sie es danach erneut!' );
SIGNAL sqlstate '45001' set message_text = msg;
else
if (new.user = null or new.user = '') then
set pUser = 'dummy';
else
set pUser = new.user;
end if;
if new.updateCount = 0 then
set pCount = 0;
end if;
set new.updateCount = (pCount + 1),
new.user = pUser,
new.status = now();
end if;

END

Problem:
Wenn ich ein Update über mehrere Sätze durchführe, d.h. update Tabelle set feld = neuWert ...
dann ignoriert er mir das.
Ich habe schon versuche mit for each .. durchgeführt, aber hier bringt er mir bei der Triggerdefinition
Fehler oder er ignoriert das ganze.

Wer hätte hier einen Ansatz, wie ich das for each richtig in den Trigger einbauen kann, bzw. wie man das
Problem mit der Prüfung auf die zwischenzeitliche Änderung eines Satzes noch lösen kann?

Für eure Mühe vorab vielen Dank!
 
Werbung:
Zurück
Oben