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

Verweis auf Sitzungsvariablen (\set var='value') von PL/PGSQL

Sie können eine psql-Variable nicht direkt im plpgsql-Code verwenden. Innerhalb von Strings ist die Symbolersetzung blockiert:

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

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

Aber Sie können Serversitzungsvariablen setzen und später diese Art von Variablen im plpgsql-Code (auf Serverseite) verwenden:

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

Sie können dieselbe Technik von der Befehlszeile aus verwenden, siehe:http://okbob.blogspot.cz/2015/01/how-to-push-parameters-to-do-statement.html

letzte Anmerkung - der Code

BEGIN
  SELECT some;
END;

ist in plpgsql ungültig. Ergebnisse von SELECT s sollten in einigen Variablen gespeichert werden. Postgres hat keine Möglichkeit, das Ergebnis von freiem SELECT zurückzugeben an den Client - DO -Anweisung entspricht nicht der MS SQL-Prozedur.