Функция PL / PGSQL, возникла проблема с доступом к возвращенному набору результатов из psycopg2 - PullRequest
0 голосов
/ 19 апреля 2010

У меня есть эта функция 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's 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

в 10-й строке моей функции plpgsql, но получил ошибку от postgres.

1 Ответ

1 голос
/ 19 апреля 2010

Пожалуйста, прочитайте ошибку, которую вы получаете при изменении «ВОЗВРАТ;» "ВОЗВРАТИТЬ result_set;" А затем прочитайте следующее - "38.6.1.2. ВОЗВРАТ СЛЕДУЮЩИЙ и ВОЗВРАТ ЗАПРОС" .

Подсказка - в вашем случае вам понадобится "RETURN QUERY".

...