sql >> Base de Datos >  >> RDS >> PostgreSQL

Pl/pgSQL no hay parámetro $1 en la instrucción EXECUTE

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.