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

Facendo riferimento alle variabili di sessione (\set var='value') da PL/PGSQL

Non è possibile utilizzare direttamente una variabile psql all'interno del codice plpgsql. La sostituzione del simbolo è bloccata all'interno delle stringhe:

postgres=> select :'xx';
 ?column? 
----------
 AHOJ
(1 row)

postgres=> select ' :xx ';
?column? 
----------
 :xx 
(1 row)

Ma puoi impostare variabili di sessione del server e successivamente utilizzare questo tipo di variabili nel codice plpgsql (lato server):

postgres=> set myvars.xx = :'xx';
SET
postgres=> do $$ begin 
                   raise notice '>>%<<', current_setting('myvars.xx');
                 end $$;
NOTICE:  >>AHOJ<<
DO

Puoi usare la stessa tecnica dalla riga di comando, vedi:http://okbob.blogspot.cz/2015/01/how-to-push-parameters-to-do-statement.html

ultima nota:il codice

BEGIN
  SELECT some;
END;

non è valido in plpgsql. Risultati di qualsiasi SELECT s dovrebbe essere memorizzato in alcune variabili. Postgres non ha la possibilità di restituire il risultato di SELECT gratuito al cliente - DO non è equivalente alla procedura MS SQL.