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
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a