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