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

Riferimento al parametro psql all'interno del blocco anonimo PL/pgSQL

Il psql il parser non può vedere cosa c'è all'interno delle stringhe. Questo potrebbe essere quello che vuoi:

delete from t
where :para = 1

Fallo al di fuori di un blocco anonimo. Se hai davvero bisogno di PL/pgSQL utilizzare una funzione parametrizzata:

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

E il tuo file di script avrà:

select f(:para);

Se non vuoi aggiungere permanentemente una funzione al db, fallo tutto all'interno dello 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);

Assegna alla funzione un nome univoco in modo da non correre il rischio di perdere qualcos'altro.