Escolar Documentos
Profissional Documentos
Cultura Documentos
Cdigo da funo:
create or replace function deletaRepetido()
returns integer as
$$
declare
/*Todas as variaveis criadas aki*/
Vnavega record;
Vfabri int;
Vnome char(40);
Vid integer;
Vcont integer;
Vmaxfabri integer;
Vmaxdel integer := 0;
Vc integer;
begin
Vfabri := 1;
/*variavel Vmaxfabri recebe a quantidade de fabricantes existentes na tabela
"tb_fabricante"*/
Vmaxfabri := (select max(id) from tb_fabricante);
/*o lao de repetio vai do 0 at o valor da variavel Vxfabri*/
while Vfabri <= Vmaxfabri loop
/*sera armazenado na variavel Vnavega do tipo record, uma coluna com
todos os nomes sem repetioes*/
for Vnavega in (select distinct nome from tb_produto where id_fabricante
= Vfabri order by 1) loop
/*serao contados todos os nomes repetidos da tabela
"tb_produto", onde forem iguais a
Vnavega.nome(coluna "nome" de Vnavega contendo todos os
nomes sem repeties),
a variavel "Vnome" recebe o nome selecionado,variavel "Vcont"
recebe a quntidade de nomes iguis ao nome selecionado*/
select nome,count(nome) into Vnome,Vcont from tb_produto
where nome = Vnavega.nome group by nome;
/*imprimira no console o valor da variavel Vcont correspondente
ao nome selecionado*/
raise notice 'Value: %', Vcont;
/*Se o nome selecionado tiver repetioes entra no if*/
if Vcont > 1 then
Vc := 1;
/*lao que vai de 0 ao numero total de repeties do nome
selecionado*/
while Vc < (select count(nome) from tb_produto where
nome = Vnome) loop
/*variavel "Vid" recebe o valor do maior id do nome
repetido*/
Vid = (select id from tb_produto where nome =
Vnome order by 1 desc limit 1);
/*o nome removido com o axilio da comparao do
id da tabela com a variavel "Vid"*/
delete from tb_produto where Vid = id;
Vmaxdel := Vmaxdel + 1;
end loop;
end if;
end loop;
/*a variavel Vfabri soma mais 1 para pular para o proximo fabricante*/
Vfabri := Vfabri + 1;
end loop;
/* retornado a quantidade de nomes repetidos deletados*/
return Vmaxdel;
end;
$$ language 'plpgsql';