2012-01-10 34 views
7

tôi đang cố gắng ra chức năng và gây nên int PostgreSQL, tuy nhiên tôi đang gặp một vấn đề, khi các chức năng được kích hoạt nó được đem lại cho tôi một lỗichức năng PostgreSQL và gây nên

LỖI: kiểm soát đạt kết thúc thủ tục kích hoạt mà không cần RETURN

thủ tục đặc biệt này chỉ được thực hiện một chèn vào lệnh vì vậy tôi không hiểu tại sao nó cần một sự trở lại

đây là kịch bản:

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

Trả lời

16

Thông báo lỗi cho bạn biết tất cả. Bạn cần phải làm một RETURN từ chức năng kích hoạt:

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; 

Từ the manual:

Một chức năng kích hoạt phải trả lại hoặc NULL hoặc một giá trị kỷ lục/hàng có chính xác cấu trúc của bảng cò đã bị sa thải cho.

+0

ok cảm ơn, đã làm như bạn nói, bây giờ nó cho tôi lỗi này: LRI: giá trị khóa trùng lặp vi phạm ràng buộc duy nhất "audit_pk" CHI TIẾT: Khóa (au_code) = (124) đã tồn tại. tôi đã cheked trong bảng và 124 chưa tồn tại bất kỳ ý tưởng nào? – Karl

+0

Bạn đang gửi giao dịch nào khi lỗi này xảy ra? – Kuberchaun

+0

@Karl: Rõ ràng bạn có khóa chính trên bảng 'audit' mà bạn vi phạm khi chèn các giá trị kiểm tra. Vấn đề đó không liên quan gì đến việc viết trình kích hoạt. –

Các vấn đề liên quan