2012-02-06 8 views
5

मैं PostgreSQL डेटाबेस का उपयोग कर रहा हूं।स्तंभों की अरबी संख्या के साथ रिकॉर्ड लौटने वाले फ़ंक्शन से चुनें

मेरे पास मेरा plpgsql FUNCTION है जो स्तंभों की मनमानी संख्या के साथ एक एकल record देता है।
इस मनमानेपन के कारण मैं की तरह कुछ का उपयोग करने की आवश्यकता होगी:

SELECT * FROM my_function(97) 

लेकिन जैसे Postgres मुझे निम्न त्रुटि देता है यह काम नहीं करता:

a column definition list is required for functions returning "record"

लेकिन मैं ऐसा करता है, तो:

SELECT my_function(97) 

मैं अपेक्षित परिणाम देख सकता हूं लेकिन एक कॉलम में encapsulated।

क्या अपेक्षित परिणाम प्राप्त करने के लिए कॉलम के सेट के रूप में कार्य करने के लिए कोई तरीका है और उनमें से सभी को एक ही कॉलम encapsulating नहीं है?

उत्तर

0

आदेश वापस करने के लिए एक "कॉलम का सेट" आप TABLE या SETOF जिस स्थिति में आप वास्तव में रिकॉर्ड है जो आप से SELECT में सक्षम होना चाहिए का एक सेट वापसी के रूप में एक वापसी के प्रकार को परिभाषित करना होगा।

SETOF लौटने कार्यों के बारे में अधिक जानकारी के लिए this link to documentation

+1

मेरी समस्या कैसे एक समारोह जिनमें से एक मनमाना संख्या के साथ एक रिकॉर्ड वापस नहीं लौट सकते से लाने के लिए है, जो तालिका वैसे भी स्तंभों की एक निश्चित सेट की उम्मीद है, ताकि समस्या वैसे भी हल नहीं होता है कॉलम, मान लीजिए कि एक बार 3 कॉलम के साथ रिकॉर्ड लौटाता है, 2 कॉलम के साथ एक और बार रिकॉर्ड होता है। –

+2

@ flash.tato उस मामले में यदि आप नहीं जानते कि आपका आउटपुट कैसा दिख सकता है तो आप कुछ भी चुनने का प्रस्ताव कैसे देते हैं? – Karlson

+0

मुझे लगता है कि इंजन को रिकॉर्ड्स का निरीक्षण करना चाहिए और फ़ील्ड के मेटा डेटा को –

2

पर एक नज़र डालें आपके पास कुछ विकल्प यहाँ हैं: एक REFCURSOR

  1. वापसी और आवेदन में कि कर्सर से ला नहीं। ध्यान दें कि यदि आप एकाधिक परिणाम सेट वापस करने की आवश्यकता है तो आप वास्तव में एकाधिक REFCURSORS वापस कर सकते हैं।

  2. एक XML दस्तावेज़ लौटें और एप्लिकेशन में इसे पार्स करें।

  3. , बाहर चर का एक गुच्छा का उपयोग करें लौट रिकॉर्ड, और निर्धारित इनमें से जो मूल समस्या

से है कि वास्तविक वापसी परिणाम नियोजन बार जब आप इतने पर जाना जाने की जरूरत है का चयन करने के कॉलम की मनमानी संख्या वापस नहीं कर सकते हैं। योजनाकार को यह जानने की जरूरत है कि क्या वापस किया जा रहा है।

5

जब एक समारोह सिर्फ RETURNS record या SETOF record (और कोई OUT मापदंडों इसके साथ जाने के लिए), PostgreSQL के नाम और उसके तत्वों के प्रकार पता नहीं है और आप हर कॉल के साथ एक स्तंभ परिभाषा सूची प्रदान करने के लिए आवश्यक हैं।

सभी संभव पर कि अगर बचें और एक अच्छी तरह से ज्ञात प्रकार बजाय वापस जाएँ। workarounds @Chris provided के अलावा रिटर्न प्रकार घोषित करने के कई अन्य तरीके हैं।मैं हाल ही में व्यापक संबंधित जवाब लिखा है:

अतः पहले से ही पर काफी कुछ संबंधित प्रश्नों रहे हैं। मुझे याद है कि उनमें से एक समूह का जवाब है।
Try a search!

1

से की बाएं हाथ की ओर का चयन करें सूची में लौटने समारोह (setof) एक सेट है, का उपयोग करते समय, समारोह एक composite type देता है। किसी फ़ंक्शन में इनपुट के रूप में तालिका का उपयोग करते समय चयन सूची में किसी फ़ंक्शन का उपयोग करना मुश्किल हो सकता है।

एक तरह से समग्र प्रकार का एकल स्तंभ से आइटम का चयन करने के लिए इस प्रकार है:

SELECT 
    (my_function).field1, 
    (my_function).field2, 
    (my_function).field3 
FROM 
(SELECT my_function(*) 
FROM sometable) t 
-1

मुझे विश्वास है कि मैं का पालन करें क्या आप के बाद कर रहे हैं नहीं कर रहा हूँ, लेकिन यह काम करता है?

SELECT (my_function(97)).my_column 
समस्या
संबंधित मुद्दे