PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Pl/pgSQL il n'y a pas de paramètre $1 dans l'instruction EXECUTE

Vous avez quelques problèmes ici. Le problème immédiat est :

Cela se produit parce que $1 à l'intérieur du SQL que vous passez à EXECUTE n'est pas le même que $1 à l'intérieur du corps de la fonction principale. Les espaces réservés numérotés dans EXECUTE SQL sont dans le contexte de EXECUTE, pas dans le contexte de la fonction, vous devez donc fournir des arguments à EXECUTE pour ces espaces réservés :

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

Voir Exécuter des commandes dynamiques dans le manuel pour plus de détails.

Le problème suivant est que vous ne renvoyez rien de votre fonction qui RETURNS integer . Je ne sais pas ce que vous avez l'intention de retourner mais peut-être votre tablea a un SERIAL id que vous aimeriez retourner. Si oui, alors vous voulez quelque chose comme ça :

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

dans votre fonction.