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