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 record
ve 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_value
yerine 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_obj
bir 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?
BEGIN
ve sonra eksik noktalı virgül varRETURN QUERY
. Bu hataları düzelttikten sonra geri dönerken hatayı onaylarımrecord
; cevap olarak açıklayacaktır.