我有这个 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 得到一个错误。