2012-01-10 68 views
7

我想出来的功能,并触发INT PostgreSQL的,但我有一个问题,当功能被触发它给我一个错误PostgreSQL的功能,并触发

错误:控制达到触发程序的结束而无需返回

这个特定的程序只执行插入操作的命令,所以我不明白为什么它需要返回

这是脚本:

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

回答

16

错误消息告诉你所有。你需要做的触发功能的RETURN:

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; 

the manual

一个触发器函数必须返回NULL或者具有表的确切结构的记录/行值触发被解雇对于。

+0

好的,谢谢,按照你的说法,现在它给了我这个错误:错误:重复键值违反唯一约束“audit_pk” 细节:键(au_code)=(124)已经存在。 我在桌子上笑了,还没有124桌 有什么想法吗? – Karl 2012-01-10 15:34:21

+0

发生此错误时您要提交什么交易? – Kuberchaun 2012-01-10 15:42:46

+0

@Karl:显然你在插入审计值时违反了'audit'表的主键。这个问题与编写触发器无关。 – 2012-01-10 15:43:42