Ergebnis 1 bis 5 von 5

Thema: Trigger After Insert

  1. #1
    fh10 ist offline Neuer Benutzer
    Registriert seit
    24.07.2010
    Beiträge
    2

    Frage Trigger After Insert

    Hallo,

    ich möchte nach einem insert einen trigger ausführen, der in einer zweiten Tabelle einen Satz anlegt, und die id aus dem neu angelegten Satz in diese 2. Tabelle schreibt.

    muster1 {
    id,
    wert,
    }

    muster2{
    id,
    id aus muster 1,
    wert,
    }

    insert bekomme ich hin, aber wie komme ich im trigger an die id aus der 1. Tabelle?
    Hat jemand evtl. eine ID?

    Danke

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

    Standard

    Zitat Zitat von fh10 Beitrag anzeigen
    Hallo,

    ich möchte nach einem insert einen trigger ausführen, der in einer zweiten Tabelle einen Satz anlegt, und die id aus dem neu angelegten Satz in diese 2. Tabelle schreibt.

    muster1 {
    id,
    wert,
    }

    muster2{
    id,
    id aus muster 1,
    wert,
    }

    insert bekomme ich hin, aber wie komme ich im trigger an die id aus der 1. Tabelle?
    Hat jemand evtl. eine ID?

    Danke
    Du kannst NEW.id oder currval() verwenden.

    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
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von akretschmer Beitrag anzeigen
    Du kannst NEW.id oder currval() verwenden.

    Andreas
    ... wobei NEW.id sinnvoller ist, spart einen Funktionsaufruf ...

    Code:
    test=*# create table t1 (id serial);
    NOTICE:  CREATE TABLE will create implicit sequence "t1_id_seq" for serial column "t1.id"
    CREATE TABLE
    Zeit: 1,854 ms
    test=*# create table t2 (id serial, id_1 int);
    NOTICE:  CREATE TABLE will create implicit sequence "t2_id_seq" for serial column "t2.id"
    CREATE TABLE
    Zeit: 13,114 ms
    test=*# create or replace function trg_t1() returns trigger as $$begin insert into t2 values (default, NEW.id); return NEW; end; $$language plpgsql;
    CREATE FUNCTION
    Zeit: 0,427 ms
    test=*# create trigger trg1 after insert on t1 for each row execute procedure trg_t1();
    CREATE TRIGGER
    Zeit: 0,410 ms
    test=*# insert into t1 (id) values (default);
    INSERT 0 1
    Zeit: 0,610 ms
    test=*# select * from t2;
     id | id_1
    ----+------
      1 |    1
    (1 Zeile)
    
    Zeit: 1,024 ms
    
    test=*# insert into t1 (id) values (10);
    INSERT 0 1
    Zeit: 0,249 ms
    test=*# select * from t2;
     id | id_1
    ----+------
      1 |    1
      2 |   10
    (2 Zeilen)
    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

  4. #4
    fh10 ist offline Neuer Benutzer
    Registriert seit
    24.07.2010
    Beiträge
    2

    Standard

    oh ja! Danke.
    Klappt :-}

  5. #5
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von fh10 Beitrag anzeigen
    oh ja! Danke.
    Klappt :-}
    Nachtrag:

    der Vorschlag mit currval() ist doof, weil dies schiefgehen würde (sogar mit Fehler), wenn nicht die Sequenz befragt wird, sondern ein Wert vorgegeben.

    Und falls Marko Tiikkaja sein wCTE in 9.1 bekommt, dann gäbe es sogar einen Weg, dies mit einem einzigen SQL-Befehl und ohne TRIGGER hinzubekommen.

    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

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