Hai un paio di problemi qui. Il problema immediato è:
Ciò accade perché $1
all'interno dell'SQL che stai consegnando a EXECUTE non è lo stesso di $1
all'interno del corpo della funzione principale. I segnaposto numerati all'interno di EXECUTE SQL sono nel contesto di EXECUTE, non nel contesto della funzione, quindi è necessario fornire alcuni argomenti per EXECUTE per quei segnaposto:
execute '...' using dpol_cia, dpol_tipol, dpol_nupol, dpol_conse, dpol_date;
-- ^^^^^
Vedi Esecuzione di comandi dinamici nel manuale per i dettagli.
Il prossimo problema è che non stai restituendo nulla dalla tua funzione che RETURNS integer
. Non so cosa intendi restituire ma forse il tuo tablea
ha un id
SERIALE che vorresti restituire. Se è così, allora vuoi qualcosa di più simile a questo:
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
nella tua funzione.