Du har ett par problem här. Det omedelbara problemet är:
Det händer eftersom $1
inuti SQL som du lämnar till EXECUTE är inte detsamma som $1
inuti huvudfunktionskroppen. De numrerade platshållarna i EXECUTE SQL är i kontexten av EXECUTE, inte i funktionens kontext så du måste ange några argument till EXECUTE för dessa platshållare:
execute '...' using dpol_cia, dpol_tipol, dpol_nupol, dpol_conse, dpol_date;
-- ^^^^^
Se Utföra dynamiska kommandon i manualen för detaljer.
Nästa problem är att du inte returnerar något från din funktion som RETURNS integer
. Jag vet inte vad du tänker returnera men kanske din tablea
har ett SERIELL id
som du vill återvända. Om så är fallet, vill du ha något mer i stil med detta:
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.