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

Paramètre psql de référence dans le bloc anonyme PL/pgSQL

Le psql l'analyseur ne peut pas voir ce qu'il y a à l'intérieur des chaînes. C'est peut-être ce que vous voulez :

delete from t
where :para = 1

Faites-le en dehors d'un bloc anonyme. Si vous avez vraiment besoin de PL/pgSQL utiliser une fonction paramétrée :

create or replace function f(_para integer)
returns void as $$
begin
    if _para = 1 then
        --statements
    end if;
end; $$ language plpgsql;

Et votre fichier de script aura :

select f(:para);

Si vous ne souhaitez pas ajouter de façon permanente une fonction à la base de données, faites tout dans le script :

drop function if exists f_iu7YttW(integer);

create or replace function f_iu7YttW(_para integer)
returns void as $$
begin
    if _para = 1 then
        --statements
    end if;
end; $$ language plpgsql;

select f_iu7YttW(:para);

drop function f_iu7YttW(integer);

Donnez à la fonction un nom unique afin de ne pas courir le risque de laisser tomber autre chose.