PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Pl/pgSQL non è presente alcun parametro $1 nell'istruzione EXECUTE

Hai un paio di problemi qui. Il problema immediato è:

Ciò accade perché $1 all'interno dell'SQL che stai consegnando a EXECUTE non è lo stesso di $1 all'interno del corpo della funzione principale. I segnaposto numerati all'interno di EXECUTE SQL sono nel contesto di EXECUTE, non nel contesto della funzione, quindi è necessario fornire alcuni argomenti per EXECUTE per quei segnaposto:

execute '...' using dpol_cia, dpol_tipol, dpol_nupol, dpol_conse, dpol_date;
--            ^^^^^

Vedi Esecuzione di comandi dinamici nel manuale per i dettagli.

Il prossimo problema è che non stai restituendo nulla dalla tua funzione che RETURNS integer . Non so cosa intendi restituire ma forse il tuo tablea ha un id SERIALE che vorresti restituire. Se è così, allora vuoi qualcosa di più simile a questo:

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

nella tua funzione.