Re: [pgbr-geral] Função com SQL Dinamico
Em 14 de setembro de 2012 00:56, Pedro B. Alves pedroalve...@gmail.comescreveu: Ok... presumindo que vc queira que sejam *todas as empresas* quando o $1 IS NULL, ou seja, o primeiro parâmetro seja nulo, então vc pode fazer o seguinte: r_lista RECORD; t_sql TEXT; BEGIN t_sql := 'SELECT codigo, nome FROM tcliente WHERE ativo = 1'; t_sql := t_sql || COALESCE(' AND empresa = ' || $1, ''); FOR r_lista IN EXECUTE t_sql LOOP Funcionou. Nem precisa de SQL Dinâmico para isso. Fica mais performático usando parâmetros: http://www.postgresql.org/docs/9.2/static/plpgsql-cursors.html#PLPGSQL-CURSOR-DECLARATIONS Você só vai precisar de SQL dinâmico se o nome de uma das colunas, tabelas, etc for dinâmico. Para passar um simples parâmetro não. []s -- Atenciosamente, Fábio Telles Rodriguez blog: http:// http://www.midstorm.org/~telles/http://tellesr.wordpress.com e-mail / gtalk / MSN: fabio.tel...@gmail.com Skype: fabio_telles ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Função com SQL Dinamico
Em 14 de setembro de 2012 09:02, Fábio Telles Rodriguez fabio.tel...@gmail.com escreveu: Em 14 de setembro de 2012 00:56, Pedro B. Alves pedroalve...@gmail.comescreveu: Ok... presumindo que vc queira que sejam *todas as empresas* quando o $1 IS NULL, ou seja, o primeiro parâmetro seja nulo, então vc pode fazer o seguinte: r_lista RECORD; t_sql TEXT; BEGIN t_sql := 'SELECT codigo, nome FROM tcliente WHERE ativo = 1'; t_sql := t_sql || COALESCE(' AND empresa = ' || $1, ''); FOR r_lista IN EXECUTE t_sql LOOP Funcionou. Nem precisa de SQL Dinâmico para isso. Fica mais performático usando parâmetros: http://www.postgresql.org/docs/9.2/static/plpgsql-cursors.html#PLPGSQL-CURSOR-DECLARATIONS Você só vai precisar de SQL dinâmico se o nome de uma das colunas, tabelas, etc for dinâmico. Para passar um simples parâmetro não. Veja bem os requisitos dele, eu creio que isso não funcionaria, a não ser usando um CASE no WHERE o que, no meu ponto de vista, não fica legal... veja bem os requisitos dele, ele quer *retornar todas linhas* se não passar o código da empresa por parâmetro, então presumi que ele iria entrar com NULL na chamada a função. Att, -- Fabrízio de Royes Mello Consultoria/Coaching PostgreSQL Blog sobre TI: http://fabriziomello.blogspot.com Perfil Linkedin: http://br.linkedin.com/in/fabriziomello Twitter: http://twitter.com/fabriziomello ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Função com SQL Dinamico
Ok... presumindo que vc queira que sejam *todas as empresas* quando o $1 IS NULL, ou seja, o primeiro parâmetro seja nulo, então vc pode fazer o seguinte: r_lista RECORD; t_sql TEXT; BEGIN t_sql := 'SELECT codigo, nome FROM tcliente WHERE ativo = 1'; t_sql := t_sql || COALESCE(' AND empresa = ' || $1, ''); FOR r_lista IN EXECUTE t_sql LOOP Funcionou. ... select codigo, nome from tcliente where ativo = 1 and empresa between coalesce($1,0) and coalesce($1,999) ... Jean Domingues ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Função com SQL Dinamico
select codigo, nome from tcliente where ativo = 1 and empresa between coalesce($1,0) and coalesce($1,999) Cara... não achei legal essa. Esses casos eu trabalho da seguinte forma: select codigo, nome from tcliente where ativo = 1 and ((empresa = $1) or ($1 is null)) -- Marcone Peres - DBA http://www.linkedin.com/in/marconeperes @marconeperes (61) 8146-0028 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Função com SQL Dinamico
Pessoal como que eu faço para resolver a seguinte situação: r_lista RECORD; BEGIN FOR r_lista IN ( select codigo, nome from tcliente where ativo = 1 and empresa = $1) LOOP . . . . END LOOP; END; nesta função vou ter 1 parametro que é a empresa. Só que como posso fazer pra quando quero todas as empresa? o SELECT deveria ficar assim: select codigo, nome from tclientes where ativo = 1 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Função com SQL Dinamico
Em 14 de setembro de 2012 00:01, Pedro B. Alves pedroalve...@gmail.comescreveu: Pessoal como que eu faço para resolver a seguinte situação: r_lista RECORD; BEGIN FOR r_lista IN ( select codigo, nome from tcliente where ativo = 1 and empresa = $1) LOOP . . . . END LOOP; END; nesta função vou ter 1 parametro que é a empresa. Só que como posso fazer pra quando quero todas as empresa? o SELECT deveria ficar assim: select codigo, nome from tclientes where ativo = 1 Ok... presumindo que vc queira que sejam *todas as empresas* quando o $1 IS NULL, ou seja, o primeiro parâmetro seja nulo, então vc pode fazer o seguinte: r_lista RECORD; t_sql TEXT; BEGIN t_sql := 'SELECT codigo, nome FROM tcliente WHERE ativo = 1'; t_sql := t_sql || COALESCE(' AND empresa = ' || $1, ''); FOR r_lista IN EXECUTE t_sql LOOP . . . . END LOOP; Att, -- Fabrízio de Royes Mello Consultoria/Coaching PostgreSQL Blog sobre TI: http://fabriziomello.blogspot.com Perfil Linkedin: http://br.linkedin.com/in/fabriziomello Twitter: http://twitter.com/fabriziomello ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Função com SQL Dinamico
Ok... presumindo que vc queira que sejam *todas as empresas* quando o $1 IS NULL, ou seja, o primeiro parâmetro seja nulo, então vc pode fazer o seguinte: r_lista RECORD; t_sql TEXT; BEGIN t_sql := 'SELECT codigo, nome FROM tcliente WHERE ativo = 1'; t_sql := t_sql || COALESCE(' AND empresa = ' || $1, ''); FOR r_lista IN EXECUTE t_sql LOOP Funcionou. OBrigado. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral