आपको यहां कुछ समस्याएं हैं। तत्काल समस्या है:
ऐसा इसलिए होता है क्योंकि $1
SQL के अंदर जिसे आप EXECUTE को सौंप रहे हैं वह $1
जैसा नहीं है मुख्य कार्य निकाय के अंदर। EXECUTE SQL के भीतर क्रमांकित प्लेसहोल्डर EXECUTE के संदर्भ में हैं, न कि फ़ंक्शन के संदर्भ में, इसलिए आपको उन प्लेसहोल्डर्स के लिए EXECUTE को कुछ तर्क प्रदान करने की आवश्यकता है:
execute '...' using dpol_cia, dpol_tipol, dpol_nupol, dpol_conse, dpol_date;
-- ^^^^^
देखें डायनामिक कमांड निष्पादित करना विवरण के लिए मैनुअल में।
अगली समस्या यह है कि आप अपने फ़ंक्शन से कुछ भी वापस नहीं कर रहे हैं जो RETURNS integer
. मुझे नहीं पता कि आप क्या वापस करना चाहते हैं, लेकिन शायद आपकी tablea
एक सीरियल id
है कि आप वापस लौटना चाहेंगे। अगर ऐसा है, तो आप कुछ और इस तरह चाहते हैं:
declare
tabla text := 'dpol' || extract(year from $5::timestamp);
id integer;
begin
execute 'insert into ... values ($1, ...) returning id' into id using dpol_cia, ...;
-- ^^^^^^^^^^^^ ^^^^^^^
return id;
end
आपके समारोह में।