2014/1/17 Flavio Henrique Araque Gurgel <fha...@gmail.com> > 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 pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral