Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 20 von 20

Thema: Delete Trigger mit Kopierfunktion

  1. #11
    OXO
    OXO ist offline Neuer Benutzer
    Registriert seit
    14.10.2009
    Beiträge
    17

    Standard

    Hallo,

    ich hab folgendes ausprobiert, bekomme aber immer den Fehler

    Code:
    unterminated dollar-quoted string at or near "$$
    Code:
    CREATE OR REPLACE FUNCTION funktion() RETURNS VOID AS
    $$ 
    BEGIN
            INSERT INTO table_2 VALUES (OLD.id, OLD.title, OLD.name);
    END;
    $$
    LANGUAGE plpgsql;
    
    CREATE TRIGGER t_copy_on_delete AFTER DELETE ON table_1 FOR EACH ROW EXECUTE PROCEDURE funktion ();
    Was mache ich hier denn falsch? Ich habe im PostgreSQL Handbuch gelesen, dass die Werte OLD/NEW etc. automatisch generiert werden. Ich hoffe, dass das dann funktionieren kann, so wie ich das spezifiziert habe!?

  2. #12
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    Du möchtest TRIGGER als Rückgabewert statt VOID nutzen.

    Du möchtest deine Spalten in deinem Trigger benennen.
    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

  3. #13
    OXO
    OXO ist offline Neuer Benutzer
    Registriert seit
    14.10.2009
    Beiträge
    17

    Standard

    First of all, thank you for your repsonse.

    Zu Punkt 1)
    Okay, danke!

    Code:
    CREATE OR REPLACE FUNCTION funktion() RETURNS TRIGGER AS ...

    Zu Punkt 2)
    Verstehe Deine Antwort noch nicht ganz, meinst Du so?
    Code:
    ...
        INSERT INTO table_2 (id, title, name) SELECT OLD.id, OLD.title, OLD.name FROM OLD;
    ...

  4. #14
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    Zu 2) Ja.

    Hintergrund: irgendwann ändert sich vielleicht der Aufbau der Tabelle. Ab dem Moment schlägt dein Trigger garantiert fehl, wenn du die Spalten nicht angibst.
    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

  5. #15
    OXO
    OXO ist offline Neuer Benutzer
    Registriert seit
    14.10.2009
    Beiträge
    17

    Standard

    Okay!

    Nur, ich vermute der Fehler ist mit dem

    "unterminated dollar-quoted string"

    kommt nicht daher. Ich hatte das heute mal mit RETURN AS TRIGGER schon mal kurz ausprobiert. Da gings dann auch nicht. Nur bin ich mir nicht mehr ganz sicher, ob da nicht dann ein anderer Fehler in der INSERT-Zeile angeprangert wurde und die fehlende Spaltenangabe der Grund war.

    Ich werds morgen mal ausprobieren und dann berichten, wie es ausgegangen ist! Vielen Dank schon mal!

  6. #16
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    Nun, nachdem ich von VOID auf TRIGGER gewechselt hatte, konnte ich die Funktion von dir mittels Copy&Paste erstellen.

    Von daher hast du entweder woanders ein Problem oder irgendwas falsch kopiert. Jedenfalls ist der Fehler bei mir nicht aufgetreten.
    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

  7. #17
    OXO
    OXO ist offline Neuer Benutzer
    Registriert seit
    14.10.2009
    Beiträge
    17

    Standard

    Super, das hört sich gut an! Dann hoff ich mal das Beste !! ;-)

    Danke nochmal für die Unterstützng!

  8. #18
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    akretschmer schickt dir dann morgen die Rechnung ;-)
    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

  9. #19
    OXO
    OXO ist offline Neuer Benutzer
    Registriert seit
    14.10.2009
    Beiträge
    17

    Standard

    Hi,

    damit auch später mal noch jemand von unserer Diskussion profitieren kann. Es hat bei mir wie folgt funktioniert mit dem Trigger bei gelöschten Zeilen:

    1) Kopier-Funktion
    Code:
    CREATE OR REPLACE FUNCTION copy_deleted_row()
    RETURNS trigger AS
    $$
    begin
        INSERT INTO table_deleted_rows(col_1, col_2, ..., col_n) SELECT OLD.col_1, OLD.col_2, ..., OLD.col_n;   
        RETURN OLD;
    end
    $$
    LANGUAGE 'plpgsql'
    VOLATILE
    RETURNS NULL ON NULL INPUT
    SECURITY INVOKER;
    2) Trigger
    Code:
    CREATE TRIGGER t_save_deleted_rows
      AFTER DELETE
      ON my_table
      FOR EACH ROW
      EXECUTE PROCEDURE copy_deleted_row();
    Ich hoffe, das hilft weiter!
    Danke nochmals an alle für die Unterstützung!

  10. #20
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard

    Code:
    CREATE OR REPLACE FUNCTION row_backup RETURNS trigger AS
    $BODY$
    BEGIN
        INSERT INTO <backuptable> VALUES(OLD.*);
        RETURN OLD;
    END;
    $BODY$  LANGUAGE 'plpgsql' VOLATILE
    oder

    INSERT INTO <backuptable> VALUES (OLD);
    Geändert von symbiont (24.11.2009 um 12:26 Uhr)

Seite 2 von 2 ErsteErste 12

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