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.