
Zitat von
hermesd
Hallo zusammen,
ich hab folgendes Problem. Ich hab mich an einem Trigger versucht der den PK aus einer Sequenz zieht auch wenn man beim insert den PK mit angibt.
Hä?
Wenn Du in einer Table einen PK basierend auf einer Sequence hast, dann sollte man nur und ausschließlich diese Sequence nutzen. Du kannst für den PK im INSERT entweder default oder nextval('sequence') angeben oder auch gleich bei der Spaltenaufzählung für den Insert die PK-Spalte weglassen. Einen extra Trigger brauchst Du da nicht.
Willst Du nach dem Insert den aktuellen PK wissen, dann verwende currval(). Ab 8.2 kannst Du außerdem noch mit RETURNING arbeiten.
Code:
Folgendes hat auch funktioniert. (After Insert )
BEGIN
update hochschule set hochschule_id=nextval('hochschule_id_seq') where hochschule_id=new.hochschule_id;
if not found then
RAISE EXCEPTION 'Ein Fehler ist aufgetreten';
End if;
RETURN NEW;
Jetzt meine Frage.
Funktioniert das auch ohne das ich ein Update in dem Trigger absetzen muss? Nein.
Ich versteh aber nun, was Du willst: Du willst ein insert into foo (id, bla) values (1, 'so geht das nicht') dahingehend verbiegen, daß daraus ein insert into foo (id, bla) values (default, 'so is besser') wird. Das könnte man evtl. über eine RULE handeln.
Hint: do instead
Andreas
Lesezeichen