è só dar um select * from
funcalcliqmerc(tipo,filial,documento,seria,clifor,item)

2009/5/26 André Pignata <[email protected]>

> acho q dessa maneira resolve seu problema
> CREATE OR REPLACE FUNCTION "public"."funcalcliqmerc" (tipo varchar, filial
> bigint, documento bigint, serie varchar, clifor bigint, item bigint, out
> liq1 numeric , out liq2 numeric , out liq3 numeric, out liq4 numeric)
> RETURNS record AS
> .
> .
> .
>     liqui1 := round((vmerc - desco - arred + acres),2);
>     liqui2 := round(desco,2);
>     liqui3 := round(arred,2);
>     liqui4 := round(acres,2);
>     return next;
>
> end;
> $body$
> LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
>
> 2009/5/26 Jeferson <[email protected]>
>
>>  segue o corpo da funcao:
>>
>> CREATE OR REPLACE FUNCTION "public"."funcalcliqmerc" (tipo varchar, filial
>> bigint, documento bigint, serie varchar, clifor bigint, item bigint) RETURNS
>> numeric [] AS
>> $body$
>> /* Corpo da nova função */
>> declare
>>
>>    linha record;
>>    bruto numeric;
>>    vmerc numeric;
>>    acres numeric;
>>    desco numeric;
>>    arred numeric;
>>    liqui numeric[];
>>
>> begin
>>
>>     select into linha documento,item,
>>     quantidade,valorunitario,coeficiente,
>>     percdescproduto,percdesctotal
>>     from movimento
>>     where movimento.tipo = $1
>>     and movimento.filial = $2
>>     and movimento.documento = $3
>>     and movimento.serie = $4
>>     and movimento.clifor = $5
>>     and movimento.item = $6;
>>
>>     if FOUND then
>>        vmerc := (linha.valorunitario * linha.quantidade);
>>        bruto := (linha.valorunitario * linha.coeficiente);
>>        bruto := (bruto * linha.quantidade);
>>        acres := bruto - vmerc;
>>        desco := bruto * (linha.percdescproduto / 100);
>>        arred := (bruto - desco) * (linha.percdesctotal / 100);
>>     else
>>        vmerc := 0.00;
>>        bruto := 0.00;
>>        acres := 0.00;
>>        desco := 0.00;
>>        arred := 0.00;
>>     end if;
>>
>>     liqui[1] := round((vmerc - desco - arred + acres),2);
>>     liqui[2] := round(desco,2);
>>     liqui[3] := round(arred,2);
>>     liqui[4] := round(acres,2);
>>
>>     return liqui;
>> end;
>> $body$
>> LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
>>
>>
>> ----- Original Message -----
>>  *From:* André Pignata <[email protected]>
>> *To:* Comunidade PostgreSQL Brasileira<[email protected]>
>> *Sent:* Tuesday, May 26, 2009 12:01 PM
>> *Subject:* Re: [pgbr-geral] retorno de funcao em view
>>
>> Ao invés de criar um array, você pode utilizar parâmetros OUT, assim cada
>> parâmetro pode ser uma coluna da sua view, se eu entendi sua dúvida, acho
>> que isto irá funcionar.
>> Abçs
>>
>> 2009/5/26 Jeferson <[email protected]>
>>
>>>  Bom dia a todos,
>>>
>>>     Criei uma funcao que retorna valores em um campo array (retorno[]).
>>> uso esse campo numa view, gostaria de saber se posso criar colunas que
>>> apontem para cada um dos valores no resultado da funcao em cada linha da
>>> consulta.
>>>
>>> _______________________________________________
>>> pgbr-geral mailing list
>>> [email protected]
>>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>>
>>>
>>
>>
>> --
>> André Luiz Martins Pignata
>> Integral Convênios Odontológicos
>> Gerente de TI
>>
>> ------------------------------
>>
>> _______________________________________________
>> pgbr-geral mailing list
>> [email protected]
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
>> _______________________________________________
>> pgbr-geral mailing list
>> [email protected]
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
>
>
> --
> André Luiz Martins Pignata
> Integral Convênios Odontológicos
> Gerente de TI
>



-- 
André Luiz Martins Pignata
Integral Convênios Odontológicos
Gerente de TI
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a