Ergebnis 1 bis 5 von 5

Thema: Triggerfunktion (Fehlermeldung)

  1. #1
    demarc ist offline Neuer Benutzer
    Registriert seit
    05.01.2011
    Beiträge
    6

    Standard Triggerfunktion (Fehlermeldung)

    Servus Zusammen,

    ich häng bei meiner Funktion an einer wahrscheinlich einfachen Fehlermeldung.
    Die Funktion soll Benutzer daran hindern auf ihren eigenen Artikel bieten zu können.
    Sobald die Artikel_id in der Tabelle Auktion und Artikel gleich sind und die Anbieter und Käufer Id ebenfalls soll der INSERT bzw das UPDATE nicht zugelassen werden.

    Die Fehlermeldung, die ich bekomme ist folgende:

    Code:
    psql:data_insertion.sql:15: ERROR:  control reached end of trigger procedure without RETURN
    KONTEXT:  PL/pgSQL function "gebot"
    Der INSERT der ausgeführt wird ist der hier:

    Code:
    INSERT INTO auktion(aktuellerpreis, festpreis, startzeit, endzeit, artikel_id, kategorie_id, kaeufer_benutzer_id)VALUES (0.00, 30.00, current_timestamp(0), current_timestamp(0) + interval '7 days', 1, 1, 2);
    Code:
    CREATE FUNCTION gebot() RETURNS trigger AS '
        DECLARE 
        lv_au_rec auktion%ROWTYPE;
        lv_ar_rec artikel%ROWTYPE;
        BEGIN
        FOR lv_au_rec IN SELECT * FROM auktion LOOP
        FOR lv_ar_rec IN SELECT * FROM artikel
            LOOP
            IF lv_au_rec.artikel_id <> lv_ar_rec.id AND lv_au_rec.kaeufer_benutzer_id = lv_ar_rec.anbieter_benutzer_id THEN
                   RAISE NOTICE ''Sie dürfen als Anbieter nicht auf ihren eingenen Artikel bieten'';
        RETURN NULL;
        ELSE RETURN NEW;
        END IF;
        END LOOP;
        END LOOP;
    
       END;' 
       LANGUAGE plpgsql;
    
    CREATE TRIGGER gebote BEFORE INSERT OR UPDATE ON auktion
        FOR EACH ROW EXECUTE PROCEDURE gebot();
    Danke im Vorraus für ein paar Tipps

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

    Standard

    Zitat Zitat von demarc Beitrag anzeigen
    Servus Zusammen,

    ich häng bei meiner Funktion an einer wahrscheinlich einfachen Fehlermeldung.
    Die Funktion soll Benutzer daran hindern auf ihren eigenen Artikel bieten zu können.
    Sobald die Artikel_id in der Tabelle Auktion und Artikel gleich sind und die Anbieter und Käufer Id ebenfalls soll der INSERT bzw das UPDATE nicht zugelassen werden.

    Die Fehlermeldung, die ich bekomme ist folgende:

    Code:
    psql:data_insertion.sql:15: ERROR:  control reached end of trigger procedure without RETURN
    KONTEXT:  PL/pgSQL function "gebot"
    Der INSERT der ausgeführt wird ist der hier:

    Code:
    INSERT INTO auktion(aktuellerpreis, festpreis, startzeit, endzeit, artikel_id, kategorie_id, kaeufer_benutzer_id)VALUES (0.00, 30.00, current_timestamp(0), current_timestamp(0) + interval '7 days', 1, 1, 2);
    Code:
    CREATE FUNCTION gebot() RETURNS trigger AS '
        DECLARE 
        lv_au_rec auktion%ROWTYPE;
        lv_ar_rec artikel%ROWTYPE;
        BEGIN
        FOR lv_au_rec IN SELECT * FROM auktion LOOP
        FOR lv_ar_rec IN SELECT * FROM artikel
            LOOP
            IF lv_au_rec.artikel_id <> lv_ar_rec.id AND lv_au_rec.kaeufer_benutzer_id = lv_ar_rec.anbieter_benutzer_id THEN
                   RAISE NOTICE ''Sie dürfen als Anbieter nicht auf ihren eingenen Artikel bieten'';
        RETURN NULL;
        ELSE RETURN NEW;
        END IF;
        END LOOP;
        END LOOP;
    
       END;' 
       LANGUAGE plpgsql;
    
    CREATE TRIGGER gebote BEFORE INSERT OR UPDATE ON auktion
        FOR EACH ROW EXECUTE PROCEDURE gebot();
    Danke im Vorraus für ein paar Tipps
    nach kurzen querlesen fehlt da, siehe fehlermeldung, ein RETURN. Und zwar nach dem letzten end loop, würd ich sagen ...

    Btw.: es gibt eine FAQ bzgl. SELECT * ...

    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
    demarc ist offline Neuer Benutzer
    Registriert seit
    05.01.2011
    Beiträge
    6

    Standard

    Schon klar, das kam mir auch!
    Die Frage die sich mir stellt ist, was ich da mit einem RETURN anfangen soll.
    Ich habe vorher alle Fälle abgefangen! Ein RETURN an dieser Stelle würde doch meine FOR Schleißen zunichte machen.
    Oder denk ich komplett falsch.

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

    Standard

    Woher weiss der Parser, das du dort schon ein RETURN hast? Füg einfach als letzte Anweisung noch eines ein.

    Oh, und btw.: nimm $$ statt den Hochkommas.
    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. #5
    demarc ist offline Neuer Benutzer
    Registriert seit
    05.01.2011
    Beiträge
    6

    Standard

    Alles klar dankeschön!

Ähnliche Themen

  1. triggerfunktion mittels psql anzeigen
    Von debaer im Forum Trigger und Funktionen
    Antworten: 4
    Letzter Beitrag: 03.12.2010, 12:36
  2. DEFAULT-Spaltenwert in der Triggerfunktion
    Von alger im Forum Trigger und Funktionen
    Antworten: 6
    Letzter Beitrag: 17.11.2010, 20:35
  3. Problem Triggerfunktion Übergabevariable
    Von debaer im Forum Trigger und Funktionen
    Antworten: 35
    Letzter Beitrag: 03.06.2009, 13:40
  4. Triggerfunktion als boolean?
    Von BoOnOdY im Forum Trigger und Funktionen
    Antworten: 2
    Letzter Beitrag: 13.08.2007, 13:24
  5. Triggerfunktion zu Erstellen einer Tabelle.
    Von rolfS im Forum Trigger und Funktionen
    Antworten: 2
    Letzter Beitrag: 04.09.2006, 15:25

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