Declaração de variáveis no PostgreSQL

6,240 views
Skip to first unread message

Bruno

unread,
Sep 28, 2016, 6:29:59 PM9/28/16
to
Olá Pessoal, 

Estou querendo declarar variáveis no PostgreSQL,  já testei em vários Clients (SquirelSQL, Dbeaver, Valentina Studio...)

Mas, esse exemplo simples

declare 
placa varchar(10);
begin
    placa := '123';
    raise notice 'Saída: %', placa; 
end;

Esta dando o erro




Será que só é possível rodar esse tipo de script no console do PostgreSQL? 



Atenciosamente,
___________________
Bruno Dumont
Skype: bruno.sdo

Delberto Muniz

unread,
Sep 28, 2016, 6:38:27 PM9/28/16
to jav...@googlegroups.com
É um bloco anônimo? Já tentou usar o DO?


DO $$DECLARE r record;
BEGIN
    FOR r IN SELECT table_schema, table_name FROM information_schema.tables
             WHERE table_type = 'VIEW' AND table_schema = 'public'
    LOOP
        EXECUTE 'GRANT ALL ON ' || quote_ident(r.table_schema) || '.' || quote_ident(r.table_name) || ' TO webuser';
    END LOOP;
END$$;

Funciona no Pgadmin3

--
Você recebeu essa mensagem porque está inscrito no grupo "java.ce" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javace+unsubscribe@googlegroups.com.
Para postar nesse grupo, envie um e-mail para jav...@googlegroups.com.
Acesse esse grupo em https://groups.google.com/group/javace.
Para mais opções, acesse https://groups.google.com/d/optout.



--
Delberto Arza Muniz
GTALK: delb...@gmail.com
MSN: delb...@hotmail.com

Bruno

unread,
Sep 28, 2016, 6:41:51 PM9/28/16
to jav...@googlegroups.com
Olá Delberto, 

Deu o mesmo erro.

Atenciosamente,
___________________
Bruno Dumont
+55 (61) 999-421-900
Skype: bruno.sdo

Delberto Muniz

unread,
Sep 28, 2016, 6:46:17 PM9/28/16
to jav...@googlegroups.com
Bruno, aqui deu certo:

DO $$DECLARE placa varchar(10);
BEGIN
    placa := '123';
    raise notice 'Saida: %', placa;
END$$;

NOTA:  Saida: 123


Query returned successfully with no result in 15 msec.

Postgresql 9.4 e Pgadmin3 1.22

Mattheus Cassundé Maciel Bessa

unread,
Sep 29, 2016, 8:55:38 AM9/29/16
to jav...@googlegroups.com
fala cara tenta trocar para text

--
Você recebeu essa mensagem porque está inscrito no grupo "java.ce" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javace+un...@googlegroups.com.

Gledston Carneiro

unread,
Sep 29, 2016, 8:55:53 AM9/29/16
to jav...@googlegroups.com
Bom dia a todos,

Bruno, não sei teu proposito em utilizar variável, talvez você queira uma fazer uma procedure, não sei...

de qualquer forma quando preciso de algo dessa natureza eu utilizo os próprios recursos do postgres que nos possibilita criação de relações temporárias em quanto conectado.

para o seu caso ficou assim:

SELECT '123'::text as placa into _carro;

explicando atribui a "variavel" '123' ao atributo placa da relação _carro.

SELECT placa from _carro;

e agora eu tenho uma relação temporária com a minha suposta variável.

se quiser pode ater fazer uma procedure..




Bruno

unread,
Sep 29, 2016, 10:00:00 AM9/29/16
to jav...@googlegroups.com
Olá  Delberto, 

Agora o erro mudou um pouco:

DO $$DECLARE placa varchar(10);
BEGIN
    placa := '123';
    raise notice 'Saida: %', placa;
END$$;

Error: ERROR: unterminated dollar-quoted string at or near "$$DECLARE placa varchar(10)"
  Position: 4
SQLState:  42601
ErrorCode: 0
Error occurred in:
DO $$DECLARE placa varchar(10)


e  ao trocar  por text, deu:

Error: ERROR: unterminated dollar-quoted string at or near "$$DECLARE placa text"
  Position: 4
SQLState:  42601
ErrorCode: 0
Error occurred in:
DO $$DECLARE placa text


Atenciosamente,
___________________
Bruno Dumont
+55 (61) 999-421-900
Skype: bruno.sdo


Delberto Muniz

unread,
Sep 29, 2016, 10:06:03 AM9/29/16
to jav...@googlegroups.com
Bruno, você testou pelo pgadmin3? E qual versão do Postgresql você está usando? Esse "DO" apareceu a partir da 9.0.

Execute isso e mande o resultado:

SELECT version();

Achei muito estranho dar esse erro.

Bruno

unread,
Sep 29, 2016, 10:35:03 AM9/29/16
to jav...@googlegroups.com
Testei no SquirelSQL.

A versão é: PostgreSQL 9.3.11 on x86_64-unknown-linux-gnu, compiled by gcc (Debian 4.7.2-5) 4.7.2, 64-bit

Vou instalar o pgadmin pra  testar.

Atenciosamente,
___________________
Bruno Dumont
+55 (61) 999-421-900
Skype: bruno.sdo


Matheus Alves

unread,
Sep 29, 2016, 10:52:06 AM9/29/16
to jav...@googlegroups.com
tenta colocar o codigo que o Delberto passou em um arquivo e executar o seguinte direto no terminal(logado como postgres):

cat arquivo.sql | psql


Atenciosamente, 
Matheus Emmanuel Coelho Alves
Analista De Sistemas
Skype: matheusecoelho | Telefone: (085) 9 9639-3216

Bruno

unread,
Sep 29, 2016, 11:06:57 AM9/29/16
to jav...@googlegroups.com
No PgAdmin funcionou.

Valeu pessoal!!!

Atenciosamente,
___________________
Bruno Dumont
+55 (61) 999-421-900
Skype: bruno.sdo


Reply all
Reply to author
Forward
0 new messages