Saya menggunakan Postgresql 9.1, dengan ubuntu 12.04.
Terinspirasi oleh jawaban Craig untuk pertanyaan saya Penggabungan jenis setof atau merekam setof saya pikir saya akan pergi baik dengan menggunakan return query, setof recorddan generator seri ke dalam fungsi plpgsql ini:
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;
Selama eksekusi saya mendapatkan kesalahan:
ERROR: set_valued function called in context that cannot accept a set
Apa yang salah ? Bertentangan dengan Craig, saya memberi tahu fungsi untuk kembali setof record.
Saya dapat mencapai sesuatu yang berfungsi persis seperti Craig, yaitu dengan mendefinisikan suatu tipe create type pair_id_value as (idx bigint, value integer)dan membuat fungsi plpgsql saya mengembalikan sebuah setof of pair_id_valuealih - alih a setof record.
Tetapi bahkan dengan solusi yang berfungsi ini, saya masih tidak mengerti mengapa select id, generate_series(0,13)sendirian akan mengembalikan hasil dalam dua kolom ... dan sebaliknya memanggil fungsi (mengembalikan setof pair_id_value) dengan return query select id, generate_series(0,my_obj.value) from my_objakan mengembalikan hasil hanya dalam satu kolom yang bidangnya terlihat seperti ini "(123123,0)" "(123123,1)" "(123123,2)" (3 baris) yang merupakan tupel jelas.
Apakah ini kasus di mana tabel sementara harus / harus dibuat?
BEGINdan titik hilang setelahRETURN QUERY. Setelah memperbaiki kesalahan-kesalahan itu saya mengkonfirmasi kesalahan ketika kembalirecord; akan menjelaskan jawaban.