在postgres中以相同的函数检索插入/更新/删除的记录

时间:2014-11-24 01:37:08

标签: postgresql postgresql-9.1 postgresql-9.2 postgresql-9.3 postgresql-8.4

我正在使用函数将值插入postgres中的表中。是否可以在同一个函数中检索插入/更新/删除的记录。

我是postgres的新手,如果有人可以指导或解释如何做到这一点,我将不胜感激。

这是我的示例函数:

CREATE OR REPLACE FUNCTION SampleFunction (in name varchar, in descsciption varchar, in userid varchar) RETURNS void AS
$BODY$
begin     
    insert into sampletable(id,categoryname,categorydesc,createdby) 
    values(default,name,descsciption,userid);        
end
$BODY$
LANGUAGE 'plpgsql'

1 个答案:

答案 0 :(得分:1)

使用RETURNING子句。

 insert into sampletable(id,categoryname,categorydesc,createdby) 
 values(default,name,descsciption,userid)
 returning *

e.g。 (未测试的):

CREATE OR REPLACE FUNCTION SampleFunction (in name varchar, in descsciption varchar, in userid varchar) RETURNS SETOF sampletable AS
$BODY$
begin     
    RETURN QUERY
    insert into sampletable(id,categoryname,categorydesc,createdby) 
    values(default,name,descsciption,userid)
    returning *;
end
$BODY$
LANGUAGE plpgsql;

请注意使用RETURNS SETOF sampletable返回表的行类型,因此您不必重复列定义。

有关详细信息,请参阅PL / PgSQL手册。

请注意,在这种情况下,您根本不需要PL / PgSQL。如果你坚持将其作为一个函数(这是不必要的),你可以写:

CREATE OR REPLACE FUNCTION SampleFunction (name varchar, descsciption varchar, userid varchar) RETURNS SETOF sampletable AS
$BODY$ 
    insert into sampletable(id,categoryname,categorydesc,createdby) 
    values(default,$1,$2,$3)
    returning *;
$BODY$
LANGUAGE sql;