Postgresql 参数化游标绑定变量的表名

Postgresql 参数化游标绑定变量的表名,postgresql,cursor,plpgsql,dynamic-sql,Postgresql,Cursor,Plpgsql,Dynamic Sql,下面是函数,其中记录存储在每次迭代的记录变量中。这里,表名是为游标绑定变量硬编码的。是否有任何方法可以通过此函数将表名作为参数传递 CREATE OR REPLACE FUNCTION test1() RETURNS SETOF refcursor AS $BODY$ DECLARE curs2 CURSOR FOR SELECT * FROM datas.test1000; begin FOR recordvar IN curs2 LOOP RAISE NOTICE 're

下面是函数,其中记录存储在每次迭代的记录变量中。这里,表名是为游标绑定变量硬编码的。是否有任何方法可以通过此函数将表名作为参数传递

CREATE OR REPLACE FUNCTION test1()
  RETURNS SETOF refcursor AS 
$BODY$
DECLARE
   curs2 CURSOR FOR SELECT * FROM datas.test1000;
begin

FOR recordvar IN curs2 LOOP
   RAISE NOTICE 'recordvar: %',recordvar; 
END LOOP ;

end;
$BODY$
language plpgsql;

不,不适用于绑定光标

但是,您可以很容易地为打开一个窗口传递一个名称。有一个问题

您的函数可以如下所示:

CREATE OR REPLACE FUNCTION test2(_tbl regclass)
  RETURNS void AS 
$func$
DECLARE
   _curs refcursor;
   rec   record;
BEGIN

OPEN _curs FOR EXECUTE
 'SELECT * FROM ' || _tbl;

LOOP
   FETCH NEXT FROM _curs INTO rec;
   EXIT WHEN rec IS NULL;

   RAISE NOTICE 'rec: %', rec; 
END LOOP;

END
$func$ language plpgsql;
只能与绑定游标一起使用。我提供了一个替代方案。
在这个密切相关的答案中有更多解释:

我使用传递表名来避免SQL注入。
更多信息请访问: