On 03-06-2016 12:53, Ricardo wrote:
>  
>  
> *From:* Sebastian Webber <mailto:[email protected]>
> *Sent:* Friday, June 03, 2016 12:14 PM
> *To:* Comunidade PostgreSQL Brasileira
> <mailto:[email protected]>
> *Subject:* Re: [pgbr-geral]Função com retorno de vários dados
>  
>  
>  
> Em 3 de junho de 2016 11:49, Ricardo <[email protected]
> <mailto:[email protected]>> escreveu:
> 
>     Bom dia pessoal.
>      
>         Sempre trabalhei com a variável tipo record para retorno uma
>     tabela em uma função usando esse procedimento.
>        
>     FOR VARIABLE IN SELECT * FROM TABELA
>     LOOP
>      
>     ....
>      
>         Porém agora preciso criar uma função onde vai ter o número
>     inicio e o número fim que vai me determinar o número de registros no
>     retorno, ou seja, não vou mais utilizar um select. Alguém pode me
>     dar uma orientação de como fazer isso ?
> 
>  
> Sugiro que vc verifique as clausulas LIMIT[1] e OFFSET.
>  
> [1] https://www.postgresql.org/docs/current/static/queries-limit.html
>  
>  
> -- 
> Sebastian Webber
> http://swebber.me
>  
> Já resolvi pessoal,
> ficou assim
>  
> CREATE OR REPLACE FUNCTION public."_Tabela_Consulta" (
>   "Par_Inicio" integer,
>   "Par_Fim" integer,
>   out "Par_Consumo" numeric,
>   out "Par_Valor" numeric
> )
> RETURNS SETOF record AS
> $body$
> DECLARE
>     Contador_Inicio INTEGER;
>  
>     Faixa_Inicio INTEGER;
>     Faixa_Fim INTEGER;
>     Faixa_Valor NUMERIC( 10, 2 );
>     Faixa_Fixa BOOLEAN;
>    
>     Faixa_Calculo INTEGER;
>     Consumo_Calculo NUMERIC( 10,2 );
>     Valor_Calculo NUMERIC( 10, 2 );
>  
> BEGIN
>  
>     Contador_Inicio := "Par_Inicio";
>  
>     WHILE Contador_Inicio < "Par_Fim"
>     LOOP
>  
> ................     
>  
>         "Par_Consumo" := Contador_Inicio;
>         "Par_Valor" := Valor_Calculo;
>            
>         Contador_Inicio := Contador_Inicio + 1;
>            
>         RETURN NEXT;
>        
>     END LOOP;
>    
>     RETURN;
>  
> END;
> $body$
> LANGUAGE 'plpgsql'
> VOLATILE
> CALLED ON NULL INPUT
> SECURITY INVOKER
> COST 100 ROWS 1000;
> 

Porque fazer tudo isso se no SQL existe o LIMIT conforme o Sebastian
sugeriu??? Além de simplificar vc terá inclusive ganhos de performance.

Att,

-- 
   Fabrízio de Royes Mello         Timbira - http://www.timbira.com.br/
   PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a