Тук имате няколко проблема. Непосредственият проблем е:
Това се случва, защото $1
вътре в SQL, който предавате на EXECUTE, не е същото като $1
вътре в основното функционално тяло. Номерираните контейнери в рамките на EXECUTE SQL са в контекста на EXECUTE, а не в контекста на функцията, така че трябва да предоставите някои аргументи на EXECUTE за тези контейнери:
execute '...' using dpol_cia, dpol_tipol, dpol_nupol, dpol_conse, dpol_date;
-- ^^^^^
Вижте Изпълнение на динамични команди в ръководството за подробности.
Следващият проблем е, че не връщате нищо от вашата функция, която RETURNS integer
. Не знам какво възнамерявате да върнете, но може би вашата tablea
има СЕРИЕН id
че бихте искали да се върнете. Ако е така, тогава искате нещо по-подобно на това:
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
във вашата функция.