>>>>> "Paolo" == Paolo Armani <armani7@xxxxxxxxxxx> writes: Paolo> On Monday 10 November 2003 11:44, you wrote: >> create function chk_ad_assenze_sovrapposte (integer_t, >> timestamp_t) Paolo> Si dichaira cosi?? Non era create function Paolo> chk_ad_assenze_sovrapposte (integer, timestamp) Sorry, ho omesso la creazione dei domains, ho copiato lo script di creazione... Paolo> Nota che il trigger nel caso in cui vada tutto bene(cioe' Paolo> quando non viene eseguito un raise exception) deve Paolo> ritornare sempre il dichiarato trigger: return NEW; Uh, aggiunto... (qui il primo hint! :) >> Ma il codice seguente genera un errore per il fatto che "la >> funzione xxx non esiste":: Paolo> Spesso succede per problemi di cast, se non funziona con le Paolo> altre modifiche prova a forzarlo (se non ricordo male cmq Paolo> dovresti accorgerti perche' nell'errore ti mette anche i Paolo> tipi che si aspetta) Questo è l'errore che ottengo (ma il secondo hint comincia a fare effetto :): error 'ERROR: CreateTrigger: function chk_ad_assenze_sovrapposte() does not exist ' in ' create trigger trg_ad_assenze_sovrapposte before insert or update on AssenzeDipendenti for each row execute procedure chk_ad_assenze_sovrapposte (IDDipendente, DataInizioAssenza);' >> create trigger trg_ad_assenze_sovrapposte before insert or >> update on AssenzeDipendenti for each row execute procedure >> chk_ad_assenze_sovrapposte (IDDipendente, DataInizioAssenza); Paolo> Se non ricordo male nella funzione creata puoi accedere ai Paolo> campi della tabella con NEW.nome_colonna e OLD.nome_colonna Paolo> (quando esistono...) ed eventualmente modificarlo e poi Paolo> ritornarlo modificato, se il trigger e' stato creato con la Paolo> clausola before. Quindi o non passi nessun parametro (e Paolo> quindi anche la funzione quando la crei, non ne dichiara) o Paolo> li passi cosi' (se sempre ricordo bene...): Paolo> execute procedure chk_ad_assenze_sovrapposte Paolo> (NEW.IDDipendente, NEW.DataInizioAssenza); Questo no, mi da questo errore: error 'ERROR: parser: parse error at or near "new" at character 158 ' in ' create trigger trg_ad_assenze_sovrapposte before insert or update on AssenzeDipendenti for each row execute procedure chk_ad_assenze_sovrapposte (new.IDDipendente, new.DataInizioAssenza);' Però mi hai dato lo spunto giusto, e ho infine risolto. Il problema era proprio sul tipo di funzione che si aspetta il trigger. Non l'ho trovato nella doc, ma in questo caso bisogna fare qc del genere: create function chk_ad_assenze_sovrapposte() returns trigger as ' begin if (exists (select iddipendente from AssenzeDipendenti ad where ad.IDDipendente = new.IDDipendente and ad.DataInizioAssenza <= new.DataInizioAssenza and ad.DataFineAssenza >= new.DataInizioAssenza raise exception ''Assenze sovrapposte''; end if; return new; end; ' language plpgsql; create trigger trg_ad_assenze_sovrapposte before insert or update on AssenzeDipendenti for each row execute procedure chk_ad_assenze_sovrapposte(); vale a dire, il trigger si aspetta una funzione SENZA parametri, la quale si trova un NEW (o OLD) che si riferisce al record corrente della tabella associata... ciao, e grazie!! -- nickname: Lele Gaifax | Quando vivrò di quello che ho pensato ieri real: Emanuele Gaifas | comincerò ad aver paura di chi mi copia. email: lele@xxxxxxxxxx | -- Fortunato Depero, 1929. -- Per iscriversi (o disiscriversi), basta spedire un messaggio con OGGETTO "subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx