PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Se référant aux variables de session (\set var='value') de PL/PGSQL

Vous ne pouvez pas utiliser directement des variables psql dans le code plpgsql. La substitution de symboles est bloquée à l'intérieur des chaînes :

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

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

Mais vous pouvez définir des variables de session serveur et plus tard utiliser ce type de variables dans le code plpgsql (côté serveur) :

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

Vous pouvez utiliser la même technique à partir de la ligne de commande, voir :http://okbob.blogspot.cz/2015/01/how-to-push-parameters-to-do-statement.html

dernière note - le code

BEGIN
  SELECT some;
END;

n'est pas valide dans plpgsql. Résultats de n'importe quel SELECT s doit être stocké dans certaines variables. Postgres n'a pas la possibilité de renvoyer le résultat de SELECT libre au client - DO l'instruction n'est pas équivalente à la procédure MS SQL.