postgresql,pgadmin错误RETURN在函数返回集中没有参数

时间:2016-11-29 11:12:45

标签: postgresql plpgsql

我做了这样的功能

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

1 个答案:

答案 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;