मैं Postgresql 9.1 का उपयोग करता हूं, ubuntu 12.04 के साथ।
मेरे सवाल का क्रेग की जवाब से प्रेरित होकर 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
।
मैं कुछ ऐसा हासिल कर सकता हूं जो क्रैग की तरह काम कर रहा है, यानी एक प्रकार को परिभाषित करके create type pair_id_value as (idx bigint, value integer)
और मेरे plpgsql फ़ंक्शन के setof of pair_id_value
बजाय एक रिटर्न देता है setof record
।
लेकिन इस काम के समाधान के साथ, मुझे अभी भी समझ में नहीं आता है कि select id, generate_series(0,13)
अकेले दो कॉलम में परिणाम क्यों लौटाएगा ... और इसके विपरीत फ़ंक्शन (रिटर्न सेटॉफ़ पेयर_ड_वल्यू) के साथ केवल एक कॉलमreturn query select id, generate_series(0,my_obj.value) from my_obj
में परिणाम लौटाएगा जो फ़ील्ड की तरह दिखता है यह "(123123,0)" "(123123,1)" "(123123,2)" (3 पंक्तियाँ) जो स्पष्ट रूप से ट्यूपर हैं।
क्या यह ऐसा मामला है जहां एक अस्थायी तालिका बनाई जानी चाहिए / होनी चाहिए?
BEGIN
और एक के बाद एक लापता हैRETURN QUERY
। उन त्रुटियों को सुधारने के बाद, मैं लौटते समय त्रुटि की पुष्टि करता हूंrecord
; उत्तर में बताएंगे।