在postgres中重用游标声明

时间:2014-02-25 17:08:07

标签: sql function postgresql cursor postgresql-8.4

有没有办法在postgres中重用游标声明。

例如: 我有一个像下面这样的函数,我试图使用curs1的声明为curs2是否可能?

create or replace function vin_temp_test(k date,x varchar) RETURNS numeric[] AS $$
declare
curs1 CURSOR FOR select prod_name,sum(item_val) sum_value from temp_table group by prod_name;
curs2 cursor curs1;

begin
null
end;

$$ LANGUAGE plpgsql VOLATILE;

1 个答案:

答案 0 :(得分:1)

直接不可能

  • 但您可以使用视图来简化代码
  • 您可以使用动态未绑定查询

    DECLARE 
      c1 refcursor;
      c2 refcursor;
      sqlstr text;
    BEGIN
      sqlstr := 'SELECT ... ';
      OPEN c1 FOR EXECUTE sqlstr;
      OPEN c2 FOR EXECUTE sqlstr;
    

重要的问题是 - 你是什么意思'重复使用光标'“?

也许您可以使用可滚动光标并重置

有一条声明MOVE

MOVE FIRST IN curs1 -- reset cursor curs1

请参阅http://www.postgresql.org/docs/9.3/static/plpgsql-cursors.html