<स्ट्राइक>%ROWTYPE
का इस्तेमाल करें
उस स्थिति में।स्ट्राइक>
संपादित करें - साधारण मामला
एएच और डेविडईजी द्वारा किए गए परीक्षणों से पता चला है कि यह काम नहीं करेगा। दिलचस्प समस्या!
आप एक समाधान का प्रयास कर सकते हैं . जब तक आपकी परिभाषा उदाहरण की तरह है, तब तक आप बस इसका सहारा ले सकते हैं
CREATE FUNCTION test(param1 comp_type)
RETURNS integer AS
$BODY$
DECLARE
myvar comp_type;
BEGIN
return 1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
लेकिन आपकी असली समस्या शायद उतनी आसान नहीं है?
संपादित करें 2 - वास्तविक समस्या
जैसा कि अपेक्षित था, वास्तविक समस्या अधिक जटिल है:एक बहुरूपी इनपुट प्रकार .
समाधान उस परिदृश्य के लिए कठिन था, लेकिन त्रुटिपूर्ण ढंग से काम करना चाहिए:
CREATE FUNCTION test(param1 anyelement, OUT a integer, OUT myvar anyelement)
RETURNS record AS
$BODY$
BEGIN
myvar := $1; -- myvar has now the required type.
--- do stuff with myvar.
myvar := NULL; -- reset if you don't want to output ..
a := 1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
कॉल करें:
SELECT a FROM test('("foo")'::comp_type); -- just retrieve a, ignore myvar
पूरा आउटपुट देखें:
SELECT * FROM test('("foo")'::comp_type);
PostgreSQL 9.0+ के लिए नोट
v9.0 में एक महत्वपूर्ण अपडेट आया है। मैं रिलीज़ नोट को उद्धृत करता हूं :
एर्गो, मेरे समाधान के अलावा, आप सीधे इनपुट चर का उपयोग कर सकते हैं।
गतिशील फ़ाइल नाम
- एक क्लोन कैसे करें PostgreSQL में रिकॉर्ड करें
- डायनेमिक SQL का उपयोग करके कंपोजिट वैरिएबल फ़ील्ड का मान कैसे सेट करें