2012-01-10 13 views
7

Staram się funkcje i wyzwalacze int PostgreSQL, jednak ja mam problem, gdy funkcja jest wyzwalany to daje mi błądfunkcje PostgreSQL i wyzwala

BŁĄD: kontrola Osiągnięto koniec procedury wyzwalania bez RETURN

ta szczególna procedura jest wykonywany tylko wkładkę do polecenia, więc nie rozumiem, dlaczego potrzebuje powrotu

to skrypt:

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') 

Odpowiedz

16

Ten komunikat o błędzie informuje wszystkich. Trzeba zrobić powrocie z funkcji wyzwalania:

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; 

Od the manual:

Funkcja wyzwalania musi wrócić albo NULL lub wartość rekordu/wiersz mający dokładnie strukturę tabeli spust został zwolniony dla.

+0

ok dzięki, zrobiłeś tak jak powiedziałeś, teraz to daje mi ten błąd: BŁĄD: zduplikowana wartość klucza narusza unikalne ograniczenie "audit_pk" DETAL: Klucz (au_code) = (124) już istnieje. cheked w tabeli i 124 jeszcze nie istnieje jakieś pomysły? – Karl

+0

Jakie transakcje przesyłasz, gdy wystąpi ten błąd? – Kuberchaun

+0

@Karl: Najwyraźniej masz klucz podstawowy w tabeli 'audit', który naruszył podczas wstawiania wartości kontrolnych. Ten problem nie ma nic wspólnego z pisaniem spustu. –