Máte tady pár problémů. Bezprostřední problém je:
To se děje, protože $1
uvnitř SQL, které předáváte EXECUTE, není totéž jako $1
uvnitř těla hlavní funkce. Očíslované zástupné symboly v rámci EXECUTE SQL jsou v kontextu EXECUTE, nikoli v kontextu funkce, takže pro tyto zástupné symboly musíte zadat nějaké argumenty EXECUTE:
execute '...' using dpol_cia, dpol_tipol, dpol_nupol, dpol_conse, dpol_date;
-- ^^^^^
Viz Provádění dynamických příkazů podrobnosti naleznete v příručce.
Dalším problémem je, že nevracíte nic z vaší funkce, která RETURNS integer
. Nevím, co máte v úmyslu vrátit, ale možná vaše tablea
má SERIAL id
že by ses chtěl vrátit. Pokud ano, pak chcete něco podobného:
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
ve vaší funkci.