PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Referindo-se a variáveis ​​de sessão (\set var='value') de PL/PGSQL


Você não pode usar variáveis ​​do psql dentro do código do plpgsql diretamente. A substituição de símbolo é bloqueada dentro de strings:
postgres=> select :'xx';
 ?column? 
----------
 AHOJ
(1 row)

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

Mas você pode definir variáveis ​​​​de sessão do servidor e depois usar esse tipo de variável no código plpgsql (no lado do servidor):
postgres=> set myvars.xx = :'xx';
SET
postgres=> do $$ begin 
                   raise notice '>>%<<', current_setting('myvars.xx');
                 end $$;
NOTICE:  >>AHOJ<<
DO

Você pode usar a mesma técnica na linha de comando, consulte:http://okbob.blogspot.cz/2015/01/how-to-push-parameters-to-do-statement.html

última nota - o código
BEGIN
  SELECT some;
END;

é inválido em plpgsql. Resultados de qualquer SELECT s deve ser armazenado em algumas variáveis. O Postgres não tem a possibilidade de retornar o resultado de SELECT gratuito para o cliente - DO instrução não é equivalente ao procedimento MS SQL.