Em 14 de setembro de 2012 09:02, Fábio Telles Rodriguez < [email protected]> escreveu:
> Em 14 de setembro de 2012 00:56, Pedro B. Alves > <[email protected]>escreveu: > > >>> 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 [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
