2010-04-18 2 views
0

에서 설정 I이 PL/pgSQL의 기능이 : 나는 파이썬의 psycopg2 라이브러리와이를 사용하는 것을 시도하고있다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; 

합니다. 난 그냥 일반 쿼리를 할 경우

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 

Theres는 분명 내 PL/pgSQL의 기능에 문제가, 그러나 나는 그것을 올바르게 얻는 것처럼 보이지 않습니다.

는 또한

RETURN result_set; 

대신 내 plpgsql 기능의 10 라인에서 단지

RETURN 

의 사용했지만, 포스트 그레스에서 오류가 발생했습니다.

답변

1

"RETURN;"을 변경할 때 나타나는 오류를 읽어보십시오. "RETURN result_set;"으로 변경하십시오. 그리고 다음을 읽어보십시오 : "38.6.1.2. RETURN NEXT and RETURN QUERY".

힌트 - 귀하의 경우에는 "돌아 가기 쿼리"가 필요합니다.

+0

감사합니다. 이전에 RETURN QUERY 문을 본 기억이 있지만 그 것이 옳다고 생각하지 않았습니다. 그 트릭을 했어, 정말 고마워! –

관련 문제