Mesmo com a limpeza e o código acima ela apresenta a mensagem de erro:

[image: Imagem inline 1]



Enviado com MailTrack
<https://mailtrack.io/install?source=signature&lang=pt&referral=bruno.dc.fel...@gmail.com&idSignature=24>

Em 18 de fevereiro de 2016 10:41, Fabrízio de Royes Mello <
fabri...@timbira.com.br> escreveu:

> On 18-02-2016 10:30, Bruno Felipe wrote:
> > Bom dia Galera,
> >
> > Estou rodando a seguinte função (Abaixo) e dentro do bloco EXCEPTION
> > está falando que o RETURN i."Codigo" não é uma variavel do tipo record,
> > mais pelo que eu to vendo aqui ele é?
> > o que poderia estar errado?
> >
> >
> > CREATE OR REPLACE FUNCTION  AtualizaMargemVenda() RETURNS record
> > LANGUAGE plpgsql AS $$
> > DECLARE
> >   x numeric(14,4);
> >   margem numeric(14,4);
> >   calc CURSOR IS SELECT "Codigo","PrecoCusto", "PrecoVenda" From
> "Produtos";
> > BEGIN
> >     FOR i IN calc LOOP
> >         BEGIN
> >             x := (100 * i."PrecoVenda" ) / i."PrecoCusto";
> >         EXCEPTION WHEN division_by_zero THEN
> >             RAISE NOTICE 'Capiturei divisao por zero no Produto
> %',i."Codigo";
> >             RETURN i."Codigo";
> >         END;
> >         END;
> >         margem := x;
> >         UPDATE "Produtos" SET "MargemVenda" = margem WHERE "Codigo" =
> i."Codigo";
> >         RAISE NOTICE 'Produto % Atualizado para margem % ', i."Codigo",
> margem;
> >     END LOOP;
> > END;
> > $$
> >
> > O Objetivo da função é achar a margem de venda dos produtos e atualizar
> > produto a produto com a margem achada.
> >
>
> Ele está certo, vc esta declarando sua PL como "RETURNS record" e está
> devolvendo o valor de uma coluna, ou seja, i."Codigo"... use apenas
> "RETURN i" no lugar... veja se o exemplo (com algumas limpezas) não
> resolve:
>
>
> CREATE OR REPLACE FUNCTION AtualizaMargemVenda() RETURNS record
> LANGUAGE plpgsql AS $$
> DECLARE
>   x numeric(14,4);
>   margem numeric(14,4);
>   calc CURSOR IS
>     SELECT "Codigo","PrecoCusto", "PrecoVenda" From "Produtos";
> BEGIN
>   FOR i IN calc LOOP
>     margem := (100 * i."PrecoVenda" ) / i."PrecoCusto";
>
>     UPDATE "Produtos"
>        SET "MargemVenda" = margem
>      WHERE "Codigo" = i."Codigo";
>
>     RAISE NOTICE 'Produto % Atualizado para margem % ',
>       i."Codigo", margem;
>   END LOOP;
>   RETURN null;
>
> EXCEPTION WHEN division_by_zero THEN
>   RAISE NOTICE 'Capiturei divisao por zero no Produto %',i."Codigo";
>   RETURN i;
> END;
> $$
>
> Att,
>
> --
>    Fabrízio de Royes Mello         Timbira - http://www.timbira.com.br/
>    PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento
>
>
> _______________________________________________
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>



-- 
*Bruno da Cunha Felipe*
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a