यदि "किसी ज्ञात तालिका पर आधारित" से आपका तात्पर्य "बिल्कुल किसी ज्ञात तालिका की तरह" से है, तो हां ।
SQL एक कड़ाई से टाइप की जाने वाली भाषा है और कार्यों को एक अच्छी तरह से परिभाषित रिटर्न प्रकार के साथ बनाया जाना चाहिए। आप गुमनाम रिकॉर्ड पर वापस जा सकते हैं जैसा आपने स्पष्ट रूप से किया था (RETURNS SETOF record
. के साथ) ), लेकिन फिर आपको प्रत्येक कॉल के लिए एक कॉलम परिभाषा सूची जोड़नी होगी, जैसे त्रुटि संदेश आपको बताता है। कुछ इस तरह:
SELECT *
FROM my_function('foo') AS foo (
colum_name1 integer -- name and data type for every column
, colum_name2 text
, colum_name3 real);
और यह शायद ही गतिशील है।
आपका प्रश्न व्याख्या के लिए जगह छोड़ता है, लेकिन "एक ज्ञात तालिका पर आधारित" इंगित करेगा कि एक बहुरूपी कार्य चाल चल सकती है। वापसी प्रकार गतिशील रूप से किसी भी पंजीकृत पंक्ति प्रकार पर आधारित हो सकता है, और सिस्टम में प्रत्येक तालिका के लिए स्वचालित रूप से एक होता है। बेयरबोन कोड उदाहरण:
CREATE OR REPLACE FUNCTION my_function(_rowtype anyelement)
RETURNS SETOF anyelement AS
$func$
BEGIN
RETURN QUERY EXECUTE format(
'SELECT * FROM %s LIMIT 10'
, pg_typeof(_rowtype) -- pg_typeof() returns regtype, quoted where necessary
);
END
$func$ LANGUAGE plpgsql;
कॉल करें:
SELECT * FROM my_function(NULL::my_table);
इस संबंधित उत्तर में विस्तृत निर्देश (अंतिम अध्याय देखें "विभिन्न पूर्ण तालिका प्रकार" ):