우분투 12.04와 함께 Postgresql 9.1을 사용합니다.
내 질문에 크레이그의 대답에 영감을 SETOF 유형 또는 SETOF 기록의 병합 내가 사용하는 잘 갈 것이라고 생각 return query
, setof record
그리고이 plpgsql 기능에 일련의 발생기 :
create or replace function compute_all_pair_by_craig(id_obj bigint)
returns setof record as $$
begin
return query select o.id, generate_series(0,o.value) from m_obj as o;
end;
$$ language plpgsql;
실행하는 동안 오류가 발생합니다.
ERROR: set_valued function called in context that cannot accept a set
뭐가 잘못 되었 니 ? 크레이그와는 반대로 함수에게 리턴하도록 지시 setof record
합니다.
나는 Craig와 똑같이 작동하는 것을 얻을 수 있습니다. 즉, 유형을 정의하고 create type pair_id_value as (idx bigint, value integer)
plpgsql 함수가 setof of pair_id_value
대신을 반환하도록 하십시오 setof record
.
그러나이 작업 솔루션을 사용하더라도 왜 select id, generate_series(0,13)
혼자서 두 개의 열로 결과를 반환 하는지 이해하지 못합니다 ... 반대로 함수 (set_pair_id_value 반환)를 호출하면 필드가 다음과 같은 하나의 열에 만return query select id, generate_series(0,my_obj.value) from my_obj
결과가 반환됩니다 튜플 인이 "(123123,0)" "(123123,1)" "(123123,2)"(3 행)입니다.
임시 테이블을 작성해야하는 경우입니까?
BEGIN
되고 뒤에는 세미콜론이 초과RETURN QUERY
됩니다. 해당 오류를 수정 한 후 반환 할 때 오류를 확인합니다record
. 답변으로 설명합니다.