Ergebnis 1 bis 5 von 5

Thema: Änderungstabelle via Trigger + Funktion

  1. #1
    treFFnix ist offline Benutzer
    Registriert seit
    25.03.2010
    Beiträge
    68

    Frage Änderungstabelle via Trigger + Funktion

    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)

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von treFFnix Beitrag anzeigen
    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).
    Log Table Changes in PostgreSQL with tablelog - ads' corner

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    treFFnix ist offline Benutzer
    Registriert seit
    25.03.2010
    Beiträge
    68

    Standard

    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

  4. #4
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von treFFnix Beitrag anzeigen
    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

    Das kannst Du gern probieren - und dem ads auch dann mitteilen, wie es einfacher geht, er freut sich da bestimmt über Anregungen.


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    *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

Ähnliche Themen

  1. Problem Trigger erstellen welcher Funktion mit Parameter aufruft
    Von saladinmundi im Forum PL/pgSQL
    Antworten: 8
    Letzter Beitrag: 16.03.2010, 08:23
  2. Problem Trigger und Funktion oder Regel?
    Von mc-bain im Forum Trigger und Funktionen
    Antworten: 4
    Letzter Beitrag: 02.02.2010, 13:53
  3. Trigger & Funktion (Anfängerfrage)
    Von hadigari im Forum Trigger und Funktionen
    Antworten: 10
    Letzter Beitrag: 18.01.2010, 16:01
  4. Frage funktion / trigger fragen
    Von DBGTMaster im Forum Trigger und Funktionen
    Antworten: 2
    Letzter Beitrag: 23.07.2008, 09:10
  5. Trigger in einer Funktion anlegen
    Von Chuqa im Forum Trigger und Funktionen
    Antworten: 4
    Letzter Beitrag: 03.09.2007, 16:51

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum