[postgres] functie in trigger

Pagina: 1
Acties:

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 16:10
Ik zal vast iets gigantisch over het hoofd zien, maar waarom werkt het volgende niet?

SQL:
1
2
3
CREATE TRIGGER templocatie 
AFTER DELETE ON klus 
FOR EACH ROW EXECUTE PROCEDURE "public"."deletetemplocatie"(templocatieid);


2 problemen:
- ik snap niet hoe ik een variabele uit de "gedelete" row meegeef aan mijn functie
- hij kan de functie niet vinden terwijl een normale SELECT opdracht met een vaste integer dat wel kan

Even als achtergrond: wanneer een rij uit de tabel "klus" verwijderd wordt moet een rij uit "templocatie" met hetzelfde templocatieid ook verwijderd worden. Een soort cascade dus, maar de foreign key gaat daarvoor de verkeerde kant op.

De error is overigens: SQL error: ERROR: function deletetemplocatie() does not exist. Wat opzich niet eens onwaar is, want de functie is deletetemplocatie(integer).

[ Voor 16% gewijzigd door jsiegmund op 13-10-2005 18:12 ]


  • jochemd
  • Registratie: November 2000
  • Laatst online: 29-12-2025
iCe01 schreef op donderdag 13 oktober 2005 @ 18:05:
Ik zal vast iets gigantisch over het hoofd zien, maar waarom werkt het volgende niet?

SQL:
1
2
3
CREATE TRIGGER templocatie 
AFTER DELETE ON klus 
FOR EACH ROW EXECUTE PROCEDURE "public"."deletetemplocatie"(templocatieid);


2 problemen:
- ik snap niet hoe ik een variabele uit de "gedelete" row meegeef aan mijn functie
Niet, waardes uit rijen zijn automatisch bekend onder NEW.veldnaam en OUD.veldnaam.
- hij kan de functie niet vinden terwijl een normale SELECT opdracht met een vaste integer dat wel kan
Heb je hem als RETURNS TRIGGER gedefinieerd?

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 16:10
Heb er maar OLD van gemaakt ;)

Anyway: definieren als RETURN TRIGGER lukt niet omdat volgens postgres een SQL functie niks kan rertourneren van het type TRIGGER:

ERROR: SQL functions cannot return type "trigger"

  • Paul
  • Registratie: September 2000
  • Laatst online: 18:52
Wat als je die closing-" pas NA de (OLD.templocatieid) neerzet?

Ik neem aan dat templocatieid een integer-veld is in klus? Die moet je inderdaad met NEW en OLD aanspreken.

[ Voor 31% gewijzigd door Paul op 13-10-2005 20:06 ]

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 16:10
Nee, dat werkt ook niet.. het ligt eerder aan de functie denk ik, ik had return type void maar zou ook niet echt weten wat ik daar anders voor moet nemen?

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 16:10
Nu de language plpgsql erin gedropt, het returnen van het trigger type gaat nu wel; maar de gegeven foutmelding over de niet gevonden functie blijft helaas bestaan.

SQL:
1
2
3
CREATE TRIGGER templocatie 
AFTER DELETE ON klus 
FOR EACH ROW EXECUTE PROCEDURE deletetemplocatie(OLD.templocatieid);


ERROR: syntax error at or near "OLD" at character 102

En:
SQL:
1
2
3
CREATE TRIGGER templocatie 
AFTER DELETE ON klus 
FOR EACH ROW EXECUTE PROCEDURE deletetemplocatie('OLD.templocatieid');


ERROR: function deletetemplocatie() does not exist

[ Voor 63% gewijzigd door jsiegmund op 13-10-2005 21:38 ]


  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 16:10
Gelukt! 8)

SQL:
1
2
3
4
5
6
CREATE FUNCTION deletetemplocatie() RETURNS TRIGGER AS 
'BEGIN DELETE FROM templocatie WHERE locatieid=OLD.locatieid; END;' 
LANGUAGE plpgsql;

CREATE TRIGGER templocatiedel AFTER DELETE ON klus
FOR EACH ROW EXECUTE PROCEDURE deletetemplocatie();


Het zit m in die argumenten die a) niet nodig zijn en b) niet werken

[ Voor 20% gewijzigd door jsiegmund op 13-10-2005 22:05 ]

Pagina: 1