PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Verweisen Sie auf den psql-Parameter innerhalb des anonymen PL/pgSQL-Blocks

Die psql Parser kann nicht sehen, was sich in Strings befindet. Dies könnte das sein, was Sie wollen:

delete from t
where :para = 1

Tun Sie es außerhalb eines anonymen Blocks. Wenn Sie PL/pgSQL wirklich brauchen Verwenden Sie eine parametrisierte Funktion:

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

Und Ihre Skriptdatei hat:

select f(:para);

Wenn Sie der Datenbank nicht dauerhaft eine Funktion hinzufügen möchten, tun Sie dies alles innerhalb des Skripts:

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);

Geben Sie der Funktion einen eindeutigen Namen, damit Sie nicht Gefahr laufen, etwas anderes zu löschen.