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:
psql:data_insertion.sql:15: ERROR: control reached end of trigger procedure without RETURN
KONTEXT: PL/pgSQL function "gebot"
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();
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.