Ciao a tutti ho un piccolo database per la gestione di un sistema di votazioni online ,questo trigger parte all'aggiornamento di un campo di una tabella,tutto bene a parte il fatto che se OLD.ballottaggio è = false ovvero non entra nell'if tutto funziona alla perfezione, mentre se è true mi restituisce questo errore:
un valore chiave duplicato viola il vincolo univoco "elezione_pkey"
DETAIL: La chiave (id, turno)=(1, ballottaggio) esiste già.
IL PROBLEMA è che ovviamente non eissiste gia un record con quella chiave primaria ma appunto è quello che dovrebbe creare...non ho idea di dove sbattere la testa...sbaglio qualcosa?
codice:CREATE OR REPLACE FUNCTION InserimentoElezione() RETURNS TRIGGER AS $$ DECLARE Datainizio DATE%TYPE; Datafine DATE%TYPE; Giorni Integer; Get_vinc candidatura.utente_cf%TYPE; Get_secondo candidatura.utente_cf%TYPE; Getid elezione.Id%TYPE; Getturno elezione.Turno%TYPE; BEGIN SELECT OLD.id INTO Getid; SELECT OLD.turno INTO Getturno; IF(OLD.ballottaggio = TRUE) THEN Giorni=OLD.Dataf-OLD.Datain; Datainizio = OLD.Dataf + '4 days'::interval ; Datafine = Datainizio+Giorni; INSERT INTO elezione VALUES (OLD.Id , 'ballottaggio' , OLD.nomecarica , Datainizio, Datafine , FALSE , OLD.Descrizione , FALSE); SELECT Primo(OLD.Id, 'primo') INTO Get_vinc; SELECT Secondo(OLD.Id, 'primo') INTO Get_secondo; INSERT INTO candidatura VALUES( OLD.Id, Get_vinc , FALSE , 0 , 'ballottaggio'); INSERT INTO candidatura VALUES( OLD.Id, Get_secondo , FALSE , 0 , 'ballottaggio'); ELSE PERFORM vincitore(Getid,Getturno); END IF; RETURN NEW; END $$ LANGUAGE plpgsql; CREATE TRIGGER ControlloBallottaggio BEFORE UPDATE OF Scaduta ON elezione FOR EACH ROW EXECUTE PROCEDURE InserimentoElezione();

Rispondi quotando
