sql >> Base de Datos >  >> RDS >> PostgreSQL

Haciendo referencia a las variables de sesión (\set var='value') de PL/PGSQL

No puede usar variables psql dentro del código plpgsql directamente. La sustitución de símbolos está bloqueada dentro de las cadenas:

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

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

Pero puede configurar las variables de una sesión del servidor y luego usar este tipo de variables en el código plpgsql (en el lado del servidor):

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

Puede usar la misma técnica desde la línea de comando, consulte:http://okbob.blogspot.cz/2015/01/how-to-push-parameters-to-do-statement.html

última nota - el código

BEGIN
  SELECT some;
END;

no es válido en plpgsql. Resultados de cualquier SELECT s debe almacenarse en algunas variables. Postgres no tiene la posibilidad de devolver el resultado de SELECT gratis al cliente - DO declaración no es equivalente al procedimiento de MS SQL.