Re: [pgbr-geral] Função com SQL Dinamico

2012-09-14 Por tôpico Fábio Telles Rodriguez
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

2012-09-14 Por tôpico Fabrízio de Royes Mello
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

2012-09-14 Por tôpico Jean Domingues
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

2012-09-14 Por tôpico Marcone
 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

2012-09-13 Por tôpico Pedro B. Alves
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

2012-09-13 Por tôpico Fabrízio de Royes Mello
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

2012-09-13 Por tôpico Pedro B. Alves


 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