PL / PGSQL函数,无法从psycopg2访问返回的结果集

时间:2010-04-18 21:17:20

标签: postgresql function psycopg2

我有这个pl / pgsql函数:

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 个答案:

答案 0 :(得分:1)

请阅读更改“返回”时收到的错误to“RETURN result_set;”。然后阅读以下内容 - "38.6.1.2. RETURN NEXT and RETURN QUERY"

提示 - 在您的情况下,您需要“返回查询”。