有没有办法在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;
答案 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