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

Referencia al parámetro psql dentro del bloque anónimo PL/pgSQL

El psql El analizador no puede ver lo que hay dentro de las cadenas. Esto podría ser lo que quieres:

delete from t
where :para = 1

Hazlo fuera de un bloque anónimo. Si realmente necesita PL/pgSQL usar una función parametrizada:

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

Y su archivo de script tendrá:

select f(:para);

Si no desea agregar permanentemente una función a la base de datos, hágalo todo dentro del 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);

Dale a la función un nombre único para que no corras el riesgo de descartar algo más.