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
ID Zeit Wert1 Wert2 Wert3 1 2012-01-18 12:00:00.000 1 2 3 2 2012-01-18 12:01:00.000 1 2 3 3 2012-01-18 12:01:02.000 1 2 3 4 2012-01-18 12:01:05.000 1 2 3
Tabelle A.REVISION (Trigger hat alle erstmaligen INSERTS auf Tabelle A auch auf Tabelle A.REVISION übertragen)
ID Zeit Wert1 Wert2 Wert3 1 2012-01-18 12:00:00.000 1 2 3 2 2012-01-18 12:01:00.000 1 2 3 3 2012-01-18 12:01:02.000 1 2 3 4 2012-01-18 12:01.05.000 1 2 3
Jetzt wird ein Update auf Tabelle "A" ausgeführt, damit sie wie Folgt geändert wird:
(UPDATE A SET Wert1=2 WHERE ID=1)
ID Zeit Wert1 Wert2 Wert3 1 2012-01-18 14:27:01.000 2 2 3 2 2012-01-18 12:01:00.000 1 2 3 3 2012-01-18 12:01:02.000 1 2 3 4 2012-01-18 12:01:05.000 1 2 3
und jetzt soll der Trigger im Idealfall nur die Änderungen in die Tabelle "A_REVISION" überrtagen:
ID Zeit Wert1 Wert2 Wert3 1 2012-01-18 12:00:00.000 1 2 3 2 2012-01-18 12:01:00.000 1 2 3 3 2012-01-18 12:01:02.000 1 2 3 4 2012-01-18 12:01.05.000 1 2 3 1 2012-01-18 14:27:01.000 2
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
$$
BEGIN
END
$$
;
CREATE TRIGGER "TG_A_REVISION"
BEFORE INSERT OR UPDATE
ON "A" FOR EACH ROW
EXECUTE PROCEDURE FUNC_A_REVISION()
;
Gruß, Torsten
Geändert von treFFnix (18.01.2012 um 15:03 Uhr)
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Hallo Andreas,
danke für die schnelle Antwort.
Ich habe diese Seite schon gefunden (google) und muss sagen:
Das ist alles viel zu kompliziert und undurchsichtig.
Damit komm ich nicht klar.
Würde es auch ausschließlich mittels einer Funktion, geschrieben in Language SQL, möglich sein?
Gruß, Torsten
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
*smile*
Also in SQL selbst wirst du das voraussichtlich gar nicht hinbekommen.
In pl/pgSQL ist das mit einigem Aufwand und viel Skripterei möglich.
An dem Status hat sich seit rund 13 Jahren nichts geändert, seit ich tablelog damals angefangen habe zu entwickeln.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen