我做了这样的功能
create or replace function get_source2(TableName character varying)
returns setof integer as
$$
declare
geom geometry;
snode integer;
begin
execute ('select get_source(geom) from '|| TableName)
into snode;
return snode;
end
$$
language plpgsql;
输出数据将是数组类型
所以我尝试使用setof
。
如果我不使用setof
,它运行良好但只有一个结果出来。
但是,如果我使用setof
我收到类似的错误
error : RETURN cannot have a parameter in function returning set
答案 0 :(得分:1)
小心!编写函数的方式很容易被SQL注入!
你应该使用
$$BEGIN
RETURN QUERY EXECUTE 'SELECT get_source(geom) FROM '
|| quote_ident(TableName);
END;$$
然后RETURNS SETOF integer
会运作良好。
在the documentation中阅读如何在表函数中使用RETURN
:
要么你做
RETURN NEXT expression1;
RETURN NEXT expression2;
...
RETURN;
或
RETURN QUERY SELECT ...;
或
RETURN QUERY EXECUTE 'SELECT ...';
但从不
RETURN expression;