Você tem alguns problemas aqui. O problema imediato é:
Isso acontece porque
$1
dentro do SQL que você está entregando para EXECUTE não é o mesmo que $1
dentro do corpo da função principal. Os espaços reservados numerados dentro do EXECUTE SQL estão no contexto do EXECUTE, não no contexto da função, então você precisa fornecer alguns argumentos para EXECUTE para esses espaços reservados:execute '...' using dpol_cia, dpol_tipol, dpol_nupol, dpol_conse, dpol_date;
-- ^^^^^
Consulte Executando comandos dinâmicos no manual para detalhes.
O próximo problema é que você não está retornando nada da sua função que
RETURNS integer
. Não sei o que você pretende retornar, mas talvez sua tablea
tem um id
SERIAL que você gostaria de retornar. Se sim, então você quer algo mais assim: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
em sua função.