ฉันใช้ Postgresql 9.1 กับ Ubuntu 12.04
ได้รับแรงบันดาลใจจากคำตอบของ Craig ต่อคำถามของฉันการเรียง setof หรือ setof recordฉันคิดว่าฉันจะใช้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
ขัดกับเครกผมบอกฟังก์ชั่นการกลับมา
ฉันสามารถบรรลุสิ่งที่ทำงานทำเหมือนเครกคือโดยการกำหนดประเภทcreate type pair_id_value as (idx bigint, value integer)
และมีฟังก์ชั่น plpgsql ผลตอบแทนของฉันแทนsetof of pair_id_value
setof record
แต่ถึงแม้จะมีวิธีแก้ปัญหาการทำงานนี้ฉันยังไม่เข้าใจว่าทำไมselect id, generate_series(0,13)
คนเดียวจะส่งกลับผลลัพธ์ในสองคอลัมน์ ... และในทางตรงกันข้ามการเรียกฟังก์ชั่น (คืน setof 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
; จะอธิบายในคำตอบ