Du har et par problemer her. Det umiddelbare problem er:
Det sker fordi $1
inde i SQL'en, som du sender til EXECUTE, er ikke det samme som $1
inde i hovedfunktionslegemet. De nummererede pladsholdere i EXECUTE SQL er i konteksten af EXECUTE, ikke i funktionens kontekst, så du skal angive nogle argumenter til EXECUTE for disse pladsholdere:
execute '...' using dpol_cia, dpol_tipol, dpol_nupol, dpol_conse, dpol_date;
-- ^^^^^
Se Udførelse af dynamiske kommandoer i manualen for detaljer.
Det næste problem er, at du ikke returnerer noget fra din funktion, som RETURNS integer
. Jeg ved ikke, hvad du har tænkt dig at returnere, men måske din tablea
har et SERIEEL id
at du gerne vil vende tilbage. Hvis ja, så vil du have noget mere som dette:
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
i din funktion.