Opa, Em 15 de julho de 2010 10:41, Ruy Carlos Nunes de Souza < [email protected]> escreveu:
> > OK. Atualmente utilizo a versão 8.1. Tenho várias versões na minha máquina > e acabei passando batido por esse detalhe (estava utilizando o manual da > versão 8.4). Tentei utilizar a versão 8.4 mas tive problemas para rodar o > serviço em algumas máquinas. Estou aguardando a versão 9.0 (produção). > Quer nos falar dos problemas com a versão 8.4? Ambiente Linux? Windows? > > Agradeço pela rápida resposta. > > -----Mensagem original----- > De: [email protected] [mailto: > [email protected]] Em nome de > [email protected] > Enviada em: quinta-feira, 15 de julho de 2010 10:21 > Para: [email protected] > Assunto: Digest pgbr-geral, volume 41, assunto 21 > > Send pgbr-geral mailing list submissions to > [email protected] > > To subscribe or unsubscribe via the World Wide Web, visit > > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > or, via email, send a message with subject or body 'help' to > [email protected] > > You can reach the person managing the list at > [email protected] > > When replying, please edit your Subject line so it is more specific than > "Re: Contents of pgbr-geral digest..." > > > Tópicos de Hoje: > > 1. Utilização do WITH em SELECT (Ruy Carlos Nunes de Souza) > 2. Função Dinâmica, qual melhor forma de criar? > (Angelo - Web Studio Brasil) > 3. Re: Utilização do WITH em SELECT (JotaComm) > 4. Re: Função Dinâmica, qual melhor forma de criar? (JotaComm) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Thu, 15 Jul 2010 09:25:22 -0300 > From: Ruy Carlos Nunes de Souza <[email protected]> > Subject: [pgbr-geral] Utilização do WITH em SELECT > To: "[email protected]" > <[email protected]> > Message-ID: > < > 187093016958424491049e42de24722b01093432b...@sac0991.ac.correiosnet.int> > > Content-Type: text/plain; charset="iso-8859-1" > > Bom dia, > > Estou com problema de utilização da cláusula WITH com SELECT. > Segundo manual poderia utiliza-lo da seguinte forma: > > > 7.8. WITH Queries > > WITH provides a way to write subqueries for use in a larger SELECT query. > The subqueries can be > > thought of as defining temporary tables that exist just for this query. One > use of this feature is to break > > down complicated queries into simpler parts. An example is: > > WITH regional_sales AS ( > > SELECT region, SUM(amount) AS total_sales > > FROM orders > > GROUP BY region > > ), top_regions AS ( > > SELECT region > > FROM regional_sales > > WHERE total_sales > (SELECT SUM(total_sales)/10 FROM regional_sales) > > ) > > SELECT region, > > product, > > SUM(quantity) AS product_units, > > SUM(amount) AS product_sales > > FROM orders > > WHERE region IN (SELECT region FROM top_regions) > > GROUP BY region, product; > > Só que quando tento utilizar no pgAdmin um exemplo parecido, me é > apresentado o seguinte erro: > > ERROR: syntax error at or near "with" > SQL state: 42601 > > Alguém poderia ajudar? > > > > > -------------- Próxima Parte ---------- > Um anexo em HTML foi limpo... > URL: > http://listas.postgresql.org.br/pipermail/pgbr-geral/attachments/20100715/8732f34a/attachment-0001.htm > > ------------------------------ > > Message: 2 > Date: Thu, 15 Jul 2010 06:00:23 -0700 (PDT) > From: Angelo - Web Studio Brasil <[email protected]> > Subject: [pgbr-geral] Função Dinâmica, qual melhor forma de criar? > To: [email protected] > Message-ID: <[email protected]> > Content-Type: text/plain; charset="iso-8859-1" > > Amigos, bom dia, > > Estou em um impasse querendo saber dos mais experientes qual a melhor forma > de criar funções dinâmicas no PostgreSQL. > > Qual dos 2 cenários abaixo é o melhor em termos de performance, lembrando > que esta consulta é simples, mas o intuito da pergunta é para funções mais > complexas que analisam tabela com grandes quantidades de registros fazendo > joins entre > elas: > > 1 - Cenário: > Criar a consulta com vários JOINS e fazer um IF na função colocando os > respectivos WHERE de acordo com os parametros passados: > Ex: > CREATE OR REPLACE FUNCTION public.f_teste( p_id integer, p_uf character > varying > ) > RETURNS SETOF public.f_teste AS > $BODY$ > DECLARE > var_row public.f_teste%ROWTYPE; > var_record RECORD; > var_strSQL VARCHAR; > BEGIN > var_strSQL := ' > SELECT > cliente.id, > cliente.nome > FROM cliente > join uf on uf.id = cliente.uf_id > WHERE 1 = 1 > '; > IF (p_id IS NOT NULL) THEN > var_strSQL := var_strSQL || ' AND cliente.id = ' || p_id; > END IF; > > IF (p_uf IS NOT NULL) THEN > var_strSQL := var_strSQL || ' AND uf.sigla = ''' || p_uf || ''''; > END IF; > > FOR var_record IN > EXECUTE var_strSQL > LOOP > var_row.id := var_record.id; > var_row.cliente_nome := var_record.nome; > RETURN NEXT var_row; > END LOOP; > > RETURN; > END; > $BODY$ > LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER; > > > 2 - Cenário: > Criar a consulta com vários IF's colocando os respectivos JOIN e WHEREs de > acordo com os parametros passados: > Ex: > CREATE OR REPLACE FUNCTION public.f_teste( p_id integer, p_uf character > varying > ) > RETURNS SETOF public.f_teste AS > $BODY$ > DECLARE > var_row public.f_teste%ROWTYPE; > var_record RECORD; > var_join VARCHAR; > var_where VARCHAR; > var_strSQL VARCHAR; > BEGIN > > IF (p_id IS NOT NULL) THEN > var_where := var_where || ' AND cliente.id = ' || p_id; > END IF; > > IF (p_uf IS NOT NULL) THEN > var_join := var_join || ' join uf on uf.id = cliente.uf_id '; > var_where := var_where || ' AND uf.sigla = ''' || p_uf || ''''; > END IF; > > var_strSQL := ' > SELECT > cliente.id, > cliente.nome > FROM cliente > ' || var_join || ' > WHERE 1 = 1 > ' || var_where; > > FOR var_record IN > EXECUTE var_strSQL > LOOP > var_row.id := var_record.id; > var_row.cliente_nome := var_record.nome; > RETURN NEXT var_row; > END LOOP; > > RETURN; > END; > $BODY$ > LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER; > > > > > -------------- Próxima Parte ---------- > Um anexo em HTML foi limpo... > URL: > http://listas.postgresql.org.br/pipermail/pgbr-geral/attachments/20100715/fc579b63/attachment-0001.htm > > ------------------------------ > > Message: 3 > Date: Thu, 15 Jul 2010 10:15:02 -0300 > From: JotaComm <[email protected]> > Subject: Re: [pgbr-geral] Utilização do WITH em SELECT > To: Comunidade PostgreSQL Brasileira > <[email protected]> > Message-ID: > <[email protected]> > Content-Type: text/plain; charset="iso-8859-1" > > Olá, > > Em 15 de julho de 2010 09:25, Ruy Carlos Nunes de Souza < > [email protected]> escreveu: > > > Bom dia, > > > > Estou com problema de utilização da cláusula WITH com SELECT. > > Segundo manual poderia utiliza-lo da seguinte forma: > > > > Qual versão do PG? Este recurso está disponível apenas da versão 8.4. > > > > > > * > > > > 7.8. > > WITH Queries* > > > > WITH > > provides a way to write subqueries for use in a larger SELECT query. > > The subqueries can be > > > > thought of as defining temporary tables that exist just for this > > query. One use of this feature is to break > > > > down complicated queries into simpler parts. An example is: > > > > WITH regional_sales AS ( > > > > SELECT region, SUM(amount) AS total_sales > > > > FROM orders > > > > GROUP BY region > > > > ), top_regions AS ( > > > > SELECT region > > > > FROM regional_sales > > > > WHERE total_sales > > > (SELECT SUM(total_sales)/10 FROM regional_sales) > > > > ) > > > > SELECT region, > > > > product, > > > > SUM(quantity) AS product_units, > > > > SUM(amount) AS product_sales > > > > FROM orders > > > > WHERE region IN (SELECT region FROM top_regions) > > > > GROUP BY region, product; > > > > Só que quando tento utilizar no pgAdmin um exemplo parecido, me é > > apresentado o seguinte erro: > > > > ERROR: syntax error at or near "with" > > SQL state: 42601 > > > > Alguém poderia ajudar? > > > > > > > > > > > > _______________________________________________ > > pgbr-geral mailing list > > [email protected] > > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > > > > > []s > -- > JotaComm > http://jotacomm.wordpress.com > -------------- Próxima Parte ---------- > Um anexo em HTML foi limpo... > URL: > http://listas.postgresql.org.br/pipermail/pgbr-geral/attachments/20100715/f11a9465/attachment-0001.htm > > ------------------------------ > > Message: 4 > Date: Thu, 15 Jul 2010 10:20:18 -0300 > From: JotaComm <[email protected]> > Subject: Re: [pgbr-geral] Função Dinâmica, qual melhor forma de criar? > To: Comunidade PostgreSQL Brasileira > <[email protected]> > Message-ID: > <[email protected]> > Content-Type: text/plain; charset="iso-8859-1" > > Olá, > > > Em 15 de julho de 2010 10:00, Angelo - Web Studio Brasil < > [email protected]> escreveu: > > > Amigos, bom dia, > > > > Estou em um impasse querendo saber dos mais experientes qual a melhor > > forma de criar funções dinâmicas no PostgreSQL. > > > > Eu trabalharia com outra questão. > > Na definição da função definir a função como: RETURNS NULL ON NULL INPUT, > assim sendo a função retorna diretamente NULL se algum dos parâmetros for > NULL. > > > > > Qual dos 2 cenários abaixo é o melhor em termos de performance, > > lembrando que esta consulta é simples, mas o intuito da pergunta é > > para funções mais complexas que analisam tabela com grandes > > quantidades de registros fazendo joins entre elas: > > > > 1 - Cenário: > > Criar a consulta com vários JOINS e fazer um IF na função colocando os > > respectivos WHERE de acordo com os parametros passados: > > Ex: > > CREATE OR REPLACE FUNCTION public.f_teste( p_id integer, p_uf > > character varying ) > > RETURNS SETOF public.f_teste AS > > $BODY$ > > DECLARE > > var_row public.f_teste%ROWTYPE; > > var_record RECORD; > > var_strSQL VARCHAR; > > BEGIN > > var_strSQL := ' > > SELECT > > cliente.id, > > cliente.nome > > FROM cliente > > join uf on uf.id = cliente.uf_id > > WHERE 1 = 1 > > '; > > IF (p_id IS NOT NULL) THEN > > var_strSQL := var_strSQL || ' AND cliente.id = ' || p_id; > > END IF; > > > > IF (p_uf IS NOT NULL) THEN > > var_strSQL := var_strSQL || ' AND uf.sigla = ''' || p_uf || ''''; > > END IF; > > > > FOR var_record IN > > EXECUTE var_strSQL > > LOOP > > var_row.id := var_record.id; > > var_row.cliente_nome := var_record.nome; > > RETURN NEXT var_row; > > END LOOP; > > > > RETURN; > > END; > > $BODY$ > > LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER; > > > > > > 2 - Cenário: > > Criar a consulta com vários IF's colocando os respectivos JOIN e > > WHEREs de acordo com os parametros passados: > > Ex: > > CREATE OR REPLACE FUNCTION public.f_teste( p_id integer, p_uf > > character varying ) > > RETURNS SETOF public.f_teste AS > > $BODY$ > > DECLARE > > var_row public.f_teste%ROWTYPE; > > var_record RECORD; > > var_join VARCHAR; > > var_where VARCHAR; > > var_strSQL VARCHAR; > > BEGIN > > > > IF (p_id IS NOT NULL) THEN > > var_where := var_where || ' AND cliente.id = ' || p_id; > > END IF; > > > > IF (p_uf IS NOT NULL) THEN > > var_join := var_join || ' join uf on uf.id = cliente.uf_id '; > > var_where := var_where || ' AND uf.sigla = ''' || p_uf || ''''; > > END IF; > > > > var_strSQL := ' > > SELECT > > cliente.id, > > cliente.nome > > FROM cliente > > ' || var_join || ' > > WHERE 1 = 1 > > ' || var_where; > > > > FOR var_record IN > > EXECUTE var_strSQL > > LOOP > > var_row.id := var_record.id; > > var_row.cliente_nome := var_record.nome; > > RETURN NEXT var_row; > > END LOOP; > > > > RETURN; > > END; > > $BODY$ > > LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER; > > > > > > > > _______________________________________________ > > pgbr-geral mailing list > > [email protected] > > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > > > > > []s > -- > JotaComm > http://jotacomm.wordpress.com > -------------- Próxima Parte ---------- > Um anexo em HTML foi limpo... > URL: > http://listas.postgresql.org.br/pipermail/pgbr-geral/attachments/20100715/e4c9d03e/attachment.htm > > ------------------------------ > > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > > Fim da Digest pgbr-geral, volume 41, assunto 21 > *********************************************** > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > []s -- JotaComm http://jotacomm.wordpress.com
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
