Ciao a tutti!
Devo trovare un modo per controllare un vincolo di integrità.
Ho creato un sito molto simile a Facebook (con molte meno possibilità e non per mia scelta).
Il vincolo da rispettare è:
Un utente non VIP non può organizzare eventi.
Per inciso, un utente non VIP è un utente con meno di 10 amici e il campo VIP di utente è un booleano e viene aggiornato ad ogni login al sito.
Essendo un vincolo interrelazionale non posso usare un CHECK, avrei voluto creare un Asserzione ma a quanto pare Postgres non le supporta.
Allora ho tentato di scrivere un Trigger!
Questo trigger on funziona perchécodice:CREATE OR REPLACE FUNCTION organiz_eventi() RETURNS TRIGGER AS $organiz_eventi$ DECLARE utente character varying; r holder%rowtype; BEGIN utente := (SELECT email FROM utente WHERE vip = FALSE); IF ((SELECT COUNT(*) FROM evento WHERE organizzatore = utente) > 0) THEN RAISE EXCEPTION 'Non hai il diritto di organizzare eventi perché non sei un utente VIP'; END IF; END; $organiz_eventi$ LANGUAGE plpgsql; CREATE TRIGGER organiz_eventi BEFORE INSERT ON evento EXECUTE PROCEDURE organiz_eventi();
1) non ho mai scritto trigger in vita mia
2) non ho trovato abbastanza esempi e tutorial
3) mi dice che ritorna più di una riga, cosa che è vera dal momento che più di un utente nella mia tabella UTENTE ha VIP = FALSE
Come posso fare per sistemarla? Non chiedo la pappa pronta, ma qualche suggerimento!

).
Rispondi quotando