Ben ubuntu 12.04 ile Postgresql 9.1 kullanıyorum.
Sorum için Craig'in cevap esinlenerek SETOF türü veya SETOF kaydın Birleştirme kullandığımı iyi gider diye düşündüm return query, setof recordve bu plpgsql fonksiyonu içine bir dizi jeneratörü:
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;
Yürütme sırasında hatayı alıyorum:
ERROR: set_valued function called in context that cannot accept a set
Yanlış olan ne ? Craig'in tersine işlevin geri dönmesini söylüyorum setof record.
Tam olarak Craig gibi yapıyor bir şey elde edebilirsiniz, yani bir tür tanımlayarak create type pair_id_value as (idx bigint, value integer)ve benim setof of pair_id_valueyerine plpgsql işlevi bir yerine döner var setof record.
Ama neden bu bile çalışma solüsyonu ile, hala anlamıyorum select id, generate_series(0,13)yalnız bir sonuç dönecektir iki sütun ... ve birlikte fonksiyonu (döndürüyor SETOF pair_id_value) çağıran tersine return query select id, generate_series(0,my_obj.value) from my_objbir sonuç dönecektir tek sütuna hangi alan göz gibi açıkçası tuples olan bu "(123123,0)" "(123123,1)" "(123123,2)" (3 satır).
Geçici bir tablonun oluşturulması / oluşturulması gereken bir durum mu?
BEGINve sonra eksik noktalı virgül varRETURN QUERY. Bu hataları düzelttikten sonra geri dönerken hatayı onaylarımrecord; cevap olarak açıklayacaktır.