Je hebt hier een paar problemen. Het directe probleem is:
Dat gebeurt omdat $1
in de SQL die u aan EXECUTE overhandigt, is niet hetzelfde als $1
binnen het hoofdfunctielichaam. De genummerde tijdelijke aanduidingen binnen de EXECUTE SQL bevinden zich in de context van de EXECUTE, niet in de functie-context, dus u moet enkele argumenten voor EXECUTE opgeven voor die tijdelijke aanduidingen:
execute '...' using dpol_cia, dpol_tipol, dpol_nupol, dpol_conse, dpol_date;
-- ^^^^^
Zie Dynamische opdrachten uitvoeren in de handleiding voor details.
Het volgende probleem is dat je niets teruggeeft van je functie die RETURNS integer
. Ik weet niet wat je van plan bent terug te sturen, maar misschien je tablea
heeft een SERILE id
dat je terug wilt. Zo ja, dan wil je meer zoals dit:
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
in uw functie.