Nutze mal nur _PID oder nur PID ...
Hallo zusammen,
ich habe eine Funktion, die überprüfen soll, ob ein Primärschlüssel schon existiert und nur falls nicht, soll sie die Daten in die Tabelle schreiben. Diese Funktion wird von einem Trigger aufgerufen, allerdings erscheint x-mal folgender Output:
Die Funktion dazu:Code:NOTICE: PID <NULL> CONTEXT: SQL statement "INSERT INTO mytable(pid, hi_jahr) VALUES( $1 , $2 )" PL/pgSQL function "check_year" line 7 at SQL statement SQL statement "INSERT INTO mytable(pid, year) VALUES( $1 , $2 )"
Kann mir irgendjemand entweder den Output verständlich machen oder mir den Fehler zeigen?Code:CREATE OR REPLACE FUNCTION check_year() RETURNS TRIGGER AS ' DECLARE _pid integer; BEGIN SELECT INTO _pid pid FROM mytable where year=NEW.year AND pid=NEW.pid; RAISE NOTICE ''PID %'', _pid ; IF _pid IS NULL THEN INSERT INTO mytable(pid, year) VALUES(NEW.pid, NEW.year); RAISE NOTICE ''VALUES WILL BE ADDED''; RETURN NEW; ELSE RETURN null; END IF; END;' LANGUAGE plpgsql VOLATILE; create trigger test_trigger before insert or update on mytable for each row execute procedure check_year();
Danke!
Nutze mal nur _PID oder nur PID ...
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
http://ads.wars-nicht.de/blog/archiv...violation.html
Du hast ja in Deiner Funktion auch RAISE NOTICE drin, also sollte dies auch zuschlagen.Diese Funktion wird von einem Trigger aufgerufen, allerdings erscheint x-mal folgender Output:
Code:NOTICE: PID <NULL> CONTEXT: SQL statement "INSERT INTO mytable(pid, hi_jahr) VALUES( $1 , $2 )" PL/pgSQL function "check_year" line 7 at SQL statement SQL statement "INSERT INTO mytable(pid, year) VALUES( $1 , $2 )"
Ich sehe keinen Fehler.Kann mir irgendjemand entweder den Output verständlich machen oder mir den Fehler zeigen?
Danke!
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Ich wollte das eigentlich mit Triggern lösen, da ich aus einer GUI-App heraus eine Query dynamisch erstelle und daher wollte ich soviel wie möglich auf DB-Seite regeln.
Ich versteh allerdings nicht, warum keine Werte eingetragen werden und die Meldung zig-Mal erscheint. Die Query läuft praktisch ohne Ende weiter.
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Das Problem, dass ständig irgendwelche Ausgaben erscheinen, denke ich kommt davon, dass ja der Trigger für alle Insert-Operationen gilt und ich in der Funktion, die der Trigger aufruft ich einen INSERT machen will. Sprich es ist ne Endlosschleife, oder sehe ich das falsch? Kann man das irgendwie umgehen?
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
Hat sich erledigt: Anstatt den INSERT explizit aufzurufen, habe ich einfach nur RETURN NEW aufgerufen. Manchmal sieht man den ganzen Wald vor lauter Bäumen nicht...
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen