2011-08-15 15 views
15

के बजाय एक कॉलम के रूप में एकाधिक कॉलम लौटाता है, मैं वर्तमान में पोस्टग्रेस्क्ल 9.04 में एक फ़ंक्शन लिख रहा हूं, जहां मैं एक चर का उपयोग करने का प्रयास कर रहा हूं जिसका चयन एक कथन में किया जाएगा, फिर परिणाम लौटाएं।फ़ंक्शन एकाधिक कॉलम

मैं जिस कथन के साथ आया हूं वह सरल और काम करता है; हालांकि, सभी कॉलम एकाधिक कॉलम के बजाय एक कॉलम पर आउटपुट कर रहे हैं।

"(6,"test project","inbound","inbound test","processing")" 

मैं यह इतना परिणाम एक साथ concatenated नहीं कर रहे हैं कि कैसे बनाने के लिए और प्रत्येक स्तंभ आइटम अलग से लौट सकते हैं:

create or replace function foo(IN pID integer, OUT project_id integer, OUT project_name text, OUT project_type text, OUT project_description text, OUT project_status text) 
returns setof record as 

$$ 
select project_id, project_name, project_type, project_description, project_status from  t_projects 
where project_id = $1; 
$$ 

LANGUAGE SQL; 


select foo(6) -- runs function 

वर्तमान आउटपुट इस तरह दिखता है:

यहाँ मेरी समारोह है?

अग्रिम धन्यवाद।

select * from foo(6); 

जो कुछ इस तरह वापस आ जाएगी:

project_id | project_name | project_type | project_description | project_status 
-----------|--------------|--------------|---------------------|---------------- 
     6 | test project |  inbound |  inbound test |  processing 

यह postgres है कि यह दोनों तरीकों से कहा जा सकता है की एक मोड़ है और आप एक देने के

+1

आपके पास 'सेट ऑफ रिकॉर्ड' का रिटर्न प्रकार क्यों है, जबकि 'आउट' कॉलम को ' SELECT'? क्या आप रिकॉर्ड वापस करने का इरादा रखते हैं, या 'आउट' पैरामीटर को पॉप्युलेट करते हैं? आपको एक दृष्टिकोण चुनना चाहिए, दोनों नहीं। – cdhowie

+0

postgresql अभी भी मेरे लिए नया है क्योंकि मुझे माइक्रोसॉफ्ट एसक्यूएल एरवर में काम करने के लिए उपयोग किया जाता है। आदर्श रूप से, मैं चयन विवरण से परिणाम वापस करना चाहता हूं। मेरी Google खोजों में मैंने पाया कि लोग नामित आउटपुट के साथ एक प्रकार का निर्माण करेंगे या आउटपुट को फ़ंक्शन में रखेंगे। वर्तमान में, मैं अभी भी postgresql के समझ चरण में हूं :) – richh

उत्तर

27

आप इस तरह समारोह कॉल करने की आवश्यकता परिणाम। आप सेट रिटर्निंग फ़ंक्शंस पर दस्तावेज़ों को और अधिक देखना चाहते हैं, ऐसा करने के अन्य तरीके भी हैं। ओह, plpgsql के लिए लिखा गया एक विकी पेज है, लेकिन अधिकांश एसक्यूएल कार्यों पर भी लागू होता है: http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_PL/pgSQL_functions

+0

यह किया गया ... धन्यवाद बहुत धन्यवाद :) – richh

+0

यह वास्तव में quirky है। – mvexel

+0

क्यों foo (6) से 'का चयन करें' foo() को परिभाषित करते समय एक त्रुटि है 'फ़ंक्शन foo (int) रिटर्न को प्रतिस्थापित या प्रतिस्थापित करें $ $ के रूप में रिकॉर्ड सेट करें $ 1 को' xx 'के रूप में चुनें, बी के रूप में; $$ LANGUAGE एसक्यूएल; '?? –

संबंधित मुद्दे