2012-01-10 19 views
7

sto provando le funzioni e trigger int PostgreSQL, ma sto avendo un problema, quando la funzione viene attivata mi sta dando un errorefunzioni PostgreSQL e trigger

ERRORE: il controllo ha raggiunto fine della procedura di attivazione senza ritorno

questa particolare procedura è solo eseguendo un'operazione di inserimento in comando in modo che io non vedo il motivo per cui ha bisogno di un ritorno

questo è lo script:

CREATE OR REPLACE FUNCTION forest_aud_func() returns trigger as $tree_stamp$ 
BEGIN 
    insert into Audit values('k',124,'l'); 
END; 
$tree_stamp$ 
LANGUAGE plpgsql; 

create trigger forest_aud_ins after insert on forest 
for each row execute procedure forest_aud_func() 

insert into forest values('Blue',1600,'Malta','Health Ltd') 

risposta

16

Il messaggio di errore dice a tutti. Hai bisogno di fare un ritorno dalla funzione trigger:

CREATE OR REPLACE FUNCTION forest_aud_func() returns trigger as $tree_stamp$ 
BEGIN 
    insert into Audit values('k',124,'l'); 
    return new; 
END; 
$tree_stamp$ 
LANGUAGE plpgsql; 

Da the manual:

Una funzione trigger deve restituire NULL o il valore record/riga avere esattamente la struttura della tabella il grilletto è stato licenziato per.

+0

ok grazie, ha fatto come hai detto, ora il suo dandomi questo errore: ERROR: duplicare valore chiave viola vincolo unico "audit_pk" DETTAGLIO: Tasto (au_code) = (124) esiste già. ho azzannato il tavolo e 124 non esiste già qualche idea? – Karl

+0

Quale transazione stai inoltrando quando si verifica questo errore? – Kuberchaun

+0

@Karl: Apparentemente si ha una chiave primaria nella tabella 'audit' che si viola quando si inseriscono i valori di controllo. Questo problema non ha nulla a che fare con la scrittura del trigger. –