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

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