0

我正在使用函数插入postgres中的表中的值。是否可以在同一功能中检索插入/更新/删除的记录。在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

使用RETURNING条款。

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

例如(未经测试):

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; 
+0

什么应该是返回类型。我想我需要改变返回类型以及? – user2438237 2014-11-24 01:49:19

+0

出现错误:错误:查询没有结果数据的目的地 – user2438237 2014-11-24 01:53:37

+0

@ user2438237如果您在函数中使用它,那么与其他任何设置返回的查询一样,您必须提供目标。在结果中使用'RETURN QUERY INSERT .... RETURNING ...'或者'LOOP'等。所有你通常用SELECT操作的东西都可以工作。所以是的,如果你想返回结果,你将需要'RETURNS TABLE'或者在'RETURNS SETOF RECORD'中使用'OUT'和'INOUT'参数。 – 2014-11-24 02:00:19