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

Responder a