Hallo,
ich habe vor Änderungen, die in einer Tabelle “A” vorgenommen werden, auch in eine andere Tabelle “A_REVISION” zu übertragen (bei erstmaliger Eintragung UND bei einem Update).
Dabei möchte ich einen Trigger und eine in der Sprache SQL geschriebene Funktion verwenden.
Den Trigger setze ich auf Tabelle “A” an.
Hier ein Beipiel:
Tabelle A
[TABLE=“width: 500”]
[TR]
[TD]ID[/TD]
[TD]Zeit[/TD]
[TD]Wert1[/TD]
[TD]Wert2[/TD]
[TD]Wert3[/TD]
[/TR]
[TR]
[TD]1[/TD]
[TD]2012-01-18 12:00:00.000[/TD]
[TD]1[/TD]
[TD]2[/TD]
[TD]3[/TD]
[/TR]
[TR]
[TD]2[/TD]
[TD]2012-01-18 12:01:00.000[/TD]
[TD]1[/TD]
[TD]2[/TD]
[TD]3[/TD]
[/TR]
[TR]
[TD]3[/TD]
[TD]2012-01-18 12:01:02.000[/TD]
[TD]1[/TD]
[TD]2[/TD]
[TD]3[/TD]
[/TR]
[TR]
[TD]4[/TD]
[TD]2012-01-18 12:01:05.000[/TD]
[TD]1[/TD]
[TD]2[/TD]
[TD]3[/TD]
[/TR]
[/TABLE]
Tabelle A.REVISION (Trigger hat alle erstmaligen INSERTS auf Tabelle A auch auf Tabelle A.REVISION übertragen)
[TABLE=“width: 500”]
[TR]
[TD]ID[/TD]
[TD]Zeit[/TD]
[TD]Wert1[/TD]
[TD]Wert2[/TD]
[TD]Wert3[/TD]
[/TR]
[TR]
[TD]1[/TD]
[TD]2012-01-18 12:00:00.000[/TD]
[TD]1[/TD]
[TD]2[/TD]
[TD]3[/TD]
[/TR]
[TR]
[TD]2[/TD]
[TD]2012-01-18 12:01:00.000[/TD]
[TD]1[/TD]
[TD]2[/TD]
[TD]3[/TD]
[/TR]
[TR]
[TD]3[/TD]
[TD]2012-01-18 12:01:02.000[/TD]
[TD]1[/TD]
[TD]2[/TD]
[TD]3[/TD]
[/TR]
[TR]
[TD]4[/TD]
[TD]2012-01-18 12:01.05.000[/TD]
[TD]1[/TD]
[TD]2[/TD]
[TD]3[/TD]
[/TR]
[/TABLE]
Jetzt wird ein Update auf Tabelle “A” ausgeführt, damit sie wie Folgt geändert wird:
(UPDATE A SET Wert1=2 WHERE ID=1)
[TABLE=“width: 500”]
[TR]
[TD]ID[/TD]
[TD]Zeit[/TD]
[TD]Wert1[/TD]
[TD]Wert2[/TD]
[TD]Wert3[/TD]
[/TR]
[TR]
[TD]1[/TD]
[TD]2012-01-18 14:27:01.000[/TD]
[TD]2[/TD]
[TD]2[/TD]
[TD]3[/TD]
[/TR]
[TR]
[TD]2[/TD]
[TD]2012-01-18 12:01:00.000[/TD]
[TD]1[/TD]
[TD]2[/TD]
[TD]3[/TD]
[/TR]
[TR]
[TD]3[/TD]
[TD]2012-01-18 12:01:02.000[/TD]
[TD]1[/TD]
[TD]2[/TD]
[TD]3[/TD]
[/TR]
[TR]
[TD]4[/TD]
[TD]2012-01-18 12:01:05.000[/TD]
[TD]1[/TD]
[TD]2[/TD]
[TD]3[/TD]
[/TR]
[/TABLE]
und jetzt soll der Trigger im Idealfall nur die Änderungen in die Tabelle “A_REVISION” überrtagen:
[TABLE=“width: 500”]
[TR]
[TD]ID[/TD]
[TD]Zeit[/TD]
[TD]Wert1[/TD]
[TD]Wert2[/TD]
[TD]Wert3[/TD]
[/TR]
[TR]
[TD]1[/TD]
[TD]2012-01-18 12:00:00.000[/TD]
[TD]1[/TD]
[TD]2[/TD]
[TD]3[/TD]
[/TR]
[TR]
[TD]2[/TD]
[TD]2012-01-18 12:01:00.000[/TD]
[TD]1[/TD]
[TD]2[/TD]
[TD]3[/TD]
[/TR]
[TR]
[TD]3[/TD]
[TD]2012-01-18 12:01:02.000[/TD]
[TD]1[/TD]
[TD]2[/TD]
[TD]3[/TD]
[/TR]
[TR]
[TD]4[/TD]
[TD]2012-01-18 12:01.05.000[/TD]
[TD]1[/TD]
[TD]2[/TD]
[TD]3[/TD]
[/TR]
[TR]
[TD]1[/TD]
[TD]2012-01-18 14:27:01.000[/TD]
[TD]2[/TD]
[TD][/TD]
[TD][/TD]
[/TR]
[/TABLE]
kann man soweit nachvollziehen, was ich vorhabe?
Könnte mir jemand dabei helfen?
Wäre sehr Dankbar für jeden Codeschnipsel, den ich dazu gebrauchen kann.
Wenn doch die Ganze Zeile in die Tabelle A_REVISION übertragen wird, ist es halt so.
Soweit bin ich bis jetzt:
CREATE FUNCTION “FUNC_A_REVISION”()
LANGUAGE sql
VOLATILE
AS
$$
BEGINEND
$$
;
[INDENT]
CREATE TRIGGER “TG_A_REVISION”
BEFORE INSERT OR UPDATE
ON “A” FOR EACH ROW
EXECUTE PROCEDURE FUNC_A_REVISION()
;
[/INDENT]
[INDENT]
[/INDENT]
Gruß, Torsten