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

Responder a