sql >> Databasteknik >  >> RDS >> PostgreSQL

Referera till psql-parametern i anonymt PL/pgSQL-block

psql parser kan inte se vad som finns inuti strängar. Det här kan vara vad du vill ha:

delete from t
where :para = 1

Gör det utanför ett anonymt block. Om du verkligen behöver PL/pgSQL använd en parametriserad funktion:

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

Och din skriptfil kommer att ha:

select f(:para);

Om du inte vill permanent lägga till en funktion till db:n gör du allt i skriptet:

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

Ge funktionen ett unikt namn så att du inte riskerar att tappa något annat.




  1. En introduktion till Hadoop och Big Data

  2. Kontrollera om fältet är numeriskt och utför sedan jämförelse endast på de fälten i en sats?

  3. SQLSTATE[42S22]:Kolumnen hittades inte:1054 Okänd kolumn 'id' i 'where-sats' (SQL:välj * från 'låtar' där 'id' =5 limit 1)

  4. Har JDBC Postgres-drivrutinen ett sätt att ställa in client_encoding för att ansluta till databasen?