2010-04-18 57 views
0

設置我有這樣的PL/pgSQL函數:PL/PGSQL功能,在訪問返回的結果遇到麻煩psycopg2

CREATE OR REPLACE FUNCTION get_result(id integer) RETURNS SETOF my_table AS $ 
    DECLARE 
     result_set my_table%ROWTYPE; 
    BEGIN 
     IF id=0 THEN 
      SELECT INTO result_set my_table_id, my_table_value FROM my_table; 
     ELSE 
      SELECT INTO result_set my_table_id, my_table_value FROM my_table WHERE my_table_id=id; 
     END IF; 
     RETURN; 
    END; 
$ LANGUAGE plpgsql; 

我試圖用Python的psycopg2庫使用。下面是Python代碼:

import psycopg2 as pg 
conn = pg.connect(host='myhost', database='mydatabase', user='user', password='passwd') 
cur = conn.cursor() 
return cur.execute("SELECT * FROM get_result(0);") # returns NoneType 

但是,如果我只是做了常規查詢,我得到正確的行集回:

... 
return cur.execute("SELECT my_table_id, my_table_value FROM mytable;") # returns iterable result set 

即使世界顯然有毛病我PL/pgSQL函數,但我似乎無法做到。

我也嘗試過使用的

RETURN result_set; 

,而不是僅僅

RETURN 
我PLPGSQL功能的10日線

,卻得到了來自Postgres的錯誤。

回答

1

請在您更改「返回」時閱讀您收到的錯誤消息到「RETURN result_set;」。然後閱讀以下內容 - "38.6.1.2. RETURN NEXT and RETURN QUERY"

提示 - 在你的情況下,你需要「返回查詢」。

+0

非常感謝,我記得之前看到了RETURN QUERY語句,但並不認爲它是正確的。儘管如此,謝謝! – 2010-04-19 01:20:33