0

私はこの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からエラーが発生しました。

4

1 に答える 1

0

「RETURN」を変更したときに発生するエラーをお読みください。「RETURNresult_set;」に。次に、次のように読みます- 「38.6.1.2。次を返し、クエリを返す」

ヒント-あなたの場合、「RETURNQUERY」が必要です。

于 2010-04-19T00:17:17.930 に答える