PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Pl/pgSQL não há parâmetro $1 na instrução EXECUTE


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.