Tienes un par de problemas aquí. El problema inmediato es:
Eso sucede porque $1
dentro del SQL que estás entregando a EXECUTE no es lo mismo que $1
dentro del cuerpo de la función principal. Los marcadores de posición numerados dentro de EXECUTE SQL están en el contexto de EXECUTE, no en el contexto de la función, por lo que debe proporcionar algunos argumentos para EXECUTE para esos marcadores de posición:
execute '...' using dpol_cia, dpol_tipol, dpol_nupol, dpol_conse, dpol_date;
-- ^^^^^
Consulte Ejecución de comandos dinámicos en el manual para más detalles.
El siguiente problema es que no está devolviendo nada de su función que RETURNS integer
. No sé qué pretendes devolver, pero tal vez tu tablea
tiene un id
SERIAL que te gustaría volver. Si es así, entonces quieres algo más como esto:
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
en su función.