Ergebnis 1 bis 8 von 8

Thema: Trigger "Tabellenferne" Werte mitgeben

  1. #1
    Sigh ist offline Benutzer
    Registriert seit
    12.09.2008
    Ort
    Köln
    Beiträge
    69

    Standard Trigger "Tabellenferne" Werte mitgeben

    Hallo Zusammen,

    ich habe einen trigger der nach einem insert oder update in eine tabelle ausgelöst wird.

    nun möchte ich gerne dem trigger quasi parameter übergeben die nichts mit der tabelle (in die inserted oder updated wurde) zu tun haben.

    Beispiel

    Code:
    CREATE TABLE a (
        action text
    );
    
    CREATE TABLE c (
        action text,
        actionid bigint,
    );
    
    CREATE OR REPLACE FUNCTION trigger_a(
        ) RETURNS trigger AS
    $trigger_a$
    BEGIN
        INSERT INTO c(action, actionid) VALUES(NEW.action, ???); -- Was soll hier rein ?
        RETURN NULL;
    END;
    $trigger_a$
    LANGUAGE plpgsql;
    
    CREATE TRIGGER trigger_a AFTER INSERT OR UPDATE ON a FOR EACH ROW EXECUTE PROCEDURE trigger_a(); -- evtl hier die moeglichkeit parameter zu uebergeben ?
    
    insert into a (action) values('testtext') -- triggert den trigger_a aber wie von hier dem trigger zusaetzliche params uebergeben ?
    Danke

    Sigh

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

    Standard

    Zitat Zitat von Sigh Beitrag anzeigen
    Hallo Zusammen,

    ich habe einen trigger der nach einem insert oder update in eine tabelle ausgelöst wird.

    nun möchte ich gerne dem trigger quasi parameter übergeben die nichts mit der tabelle (in die inserted oder updated wurde) zu tun haben.

    Beispiel

    Code:
    CREATE TABLE a (
        action text
    );
    
    CREATE TABLE c (
        action text,
        actionid bigint,
    );
    
    CREATE OR REPLACE FUNCTION trigger_a(
        ) RETURNS trigger AS
    $trigger_a$
    BEGIN
        INSERT INTO c(action, actionid) VALUES(NEW.action, ???); -- Was soll hier rein ?
        RETURN NULL;
    END;
    $trigger_a$
    LANGUAGE plpgsql;
    
    CREATE TRIGGER trigger_a AFTER INSERT OR UPDATE ON a FOR EACH ROW EXECUTE PROCEDURE trigger_a(); -- evtl hier die moeglichkeit parameter zu uebergeben ?
    
    insert into a (action) values('testtext') -- triggert den trigger_a aber wie von hier dem trigger zusaetzliche params uebergeben ?
    Danke

    Sigh
    Sollen die Werte erraten werden oder wie hängen die mit der Insert/Update-Aktion zusammen?

    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
    Sigh ist offline Benutzer
    Registriert seit
    12.09.2008
    Ort
    Köln
    Beiträge
    69

    Standard

    das beispiel ist extrem einfacher gemacht worden.

    hintergrund ist der. Verschiedene Clientsoftwares machen ein connect zu der DB um eine action einzutragen.

    dazu führen sie

    insert into a (action) values('testtext') -- triggert den trigger_a aber wie von hier dem trigger zusaetzliche params uebergeben ?

    aus.

    nun soll die id für die action vergeben werden und es in eine 2. tabelle zusammen mit der action schreiben.

    problem ist nun das nicht jedes insert into a eine neue actionid bekommen soll.

    dafür existiert eine sequence die von jedem client per nextval aufgerufen wird wenn er eine neue actionid benötigt.

    tabelle a soll mit der actionid nicht belastet werden.

    warum nciht einfach ein 2. insert into b ?

    weil die aufrufe von insert into a so häufig vorkommen, das es unglaublich viel arbeit wäre überall noch ein insert into b hinzuzufügen

  4. #4
    Sigh ist offline Benutzer
    Registriert seit
    12.09.2008
    Ort
    Köln
    Beiträge
    69

    Standard

    hmm habe meine antwort nochmal gelesen. es ist noch komplizierter und würde extrem lange dauern alles nierderzuschreiben.

    darum die Grundfrage nochmal anders.

    kann man triggern einen externen parameter mitgeben oder nicht ?

    im endeffekt soll von außen noch eine nummer mitgegeben werden. diese nummer bestimmt der client und die nummer soll nicht in tabelle a sondern nur in tabelle c landen (zusammen mit den infos aus tabelle a)

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

    Standard

    Zitat Zitat von Sigh Beitrag anzeigen
    hmm habe meine antwort nochmal gelesen. es ist noch komplizierter und würde extrem lange dauern alles nierderzuschreiben.

    darum die Grundfrage nochmal anders.

    kann man triggern einen externen parameter mitgeben oder nicht ?
    Wie willst Du einem insert into ... diesen Parameter mitgeben?

    im endeffekt soll von außen noch eine nummer mitgegeben werden. diese nummer bestimmt der client und die nummer soll nicht in tabelle a sondern nur in tabelle c landen (zusammen mit den infos aus tabelle a)
    Eine Funktion, die mit den Werten für beide Tabellen aufgerufen wird und den Rest macht?

    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

  6. #6
    Sigh ist offline Benutzer
    Registriert seit
    12.09.2008
    Ort
    Köln
    Beiträge
    69

    Standard

    Wie willst Du einem insert into ... diesen Parameter mitgeben?
    tja genau meine frage.

    ich kann einem trigger params mitgeben bsp.

    CREATE TRIGGER trigger_a AFTER INSERT OR UPDATE ON a FOR EACH ROW EXECUTE PROCEDURE trigger_a('dies ist ein text');

    und über TG_ARGV[] auch darauf zugreifen.

    aber der parameter ist nun statisch. wie mache ich ihn dynamisch ?

    z.B.

    CREATE TRIGGER trigger_a AFTER INSERT OR UPDATE ON a FOR EACH ROW EXECUTE PROCEDURE trigger_a(dynamic bigint);

    und dann die frage wie kann ich wenn der trigger gefeuert wird diesen parameter mit leben füllen ?

    wie gebe ich einem insert mit das in dem dynamic param des trigger eine 1234 steht ?

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

    Standard

    Zitat Zitat von Sigh Beitrag anzeigen
    tja genau meine frage.

    ich kann einem trigger params mitgeben bsp.

    CREATE TRIGGER trigger_a AFTER INSERT OR UPDATE ON a FOR EACH ROW EXECUTE PROCEDURE trigger_a('dies ist ein text');

    und über TG_ARGV[] auch darauf zugreifen.

    aber der parameter ist nun statisch. wie mache ich ihn dynamisch ?

    z.B.

    CREATE TRIGGER trigger_a AFTER INSERT OR UPDATE ON a FOR EACH ROW EXECUTE PROCEDURE trigger_a(dynamic bigint);

    und dann die frage wie kann ich wenn der trigger gefeuert wird diesen parameter mit leben füllen ?

    wie gebe ich einem insert mit das in dem dynamic param des trigger eine 1234 steht ?
    Dein Trigger ist FOR EACH ROW. Ich schätze mal, da ist kein Weg, bei einem Insert von N Rows auch so viele dynamische Variablen mitzugeben. Macht auch alles irknwie keinen Sinn. Eine Alternative nannte ich. Irgendwie mußt Du ja die Inhalte angeben, die zu speichern sind.

    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

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

    Standard

    1. du kannst für eine triggerfunktion parameter definieren
    2. du kannst bei der verwendung der triggerfunktion in einem konkreten trigger (per CREATE TRIGGER) den parametern argumente mitgeben - also statisch bei Definition
    3. du kannst diese parameter aber nicht mit dem INSERT, der den Trigger auslöst veraendern
    Geändert von symbiont (01.10.2009 um 15:35 Uhr)

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