2014-02-25 65 views
0

有沒有辦法在postgres中重用遊標聲明。在postgres中重用遊標聲明

例如: 我有一個像下面的函數,我想用curs1的curs1的聲明是可能的嗎?

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

直接就不可能

  • ,但你可以通過使用視圖
  • 您可以使用動態綁定查詢

    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