2014/1/17 Flavio Henrique Araque Gurgel <[email protected]>
> Um detalhe: esse exemplo não funcionaria por que não dá para usar
>>> EXECUTE com SELECT.
>>>
>>
>> Use PERFORM quando precisar gerar consulta dinâmica que retorne
>> resultados, como SELECT.
>>
>
> Eu só esqueci de acrescentar que os resultados serão *descartados* pelo
> perform. A utilidade dele é justamente essa, por exemplo, executar uma
> função, um SELECT...INTO, etc.
>
>
Acho que há uma confusão dos colegas nas três afirmações acima... Vou
resumir tudo abaixo para tentar esclarecer.
1. EXECUTE com SELECT é possível sim, por exemplo:
a) uma única linha:
EXECUTE 'SELECT ...' INTO minha_variavel;
b) várias linhas:
FOR variavel_record IN EXECUTE 'SELECT ...' LOOP
-- usar variavel_record.coluna1, ...
END LOOP;
2. O comando PERFORM não serve para executar consultas dinâmicas, apenas
para consultas "estáticas" (ou seja, não contidas numa variável ou
expressão). Consultas dinâmicas, ignorando ou não o resultado, sempre deve
ser usado o EXECUTE. É um erro que tenho visto bastante ultimamente, não
sei o porquê.
3. De fato o PERFORM descarta o valor. A palavra PERFORM deve ser usado
**exatamente** no lugar de onde estaria um SELECT, mas o resultado desse
SELECT deve ser descartado.
Para exemplificar um PERFORM, se você que chamar a função setval, via SQL
direto poderia simplesmente usar:
SELECT setval(...);
Via PL/pgSQL, também pode usar a forma acima, mas precisa
**obrigatoriamente** "salvar" o resultado numa variável:
SELECT setval(...) INTO variavel;
Agora, se quiser ignorar o resultado (ou seja, não salvar o valor na
variável), basta usar o mesmo modelo de SQL mas trocando a palavra SELECT
por PERFORM (que só é válido em PL/pgSQL, não SQL puro):
PERFORM setval(...);
Espero que tenha esclarecido (e não confundido mais, :P ).
Atenciosamente,
--
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral