La tabla se llama PERSONAL y tiene los campos de tipo varchar:
pers_id -> identificación
pers_pat -> apellido paterno
pers_mat -> apellido materno
pers_nom -> nombres
La idea es saber qué personas tienen registros duplicados
CREATE OR REPLACE FUNCTION base.duplicado_personal_hallar(cschema character varying)
RETURNS SETOF record AS
$BODY$
declare
r record; cpat varchar := ''; cmat varchar := ''; cnom varchar := '';
BEGIN
execute 'set search_path to ' || cschema || ', base, public' ;
create temp table tmp_persdup (pers_id character varying(20) , pers_pat character varying(25) DEFAULT '',
pers_mat character varying(25) DEFAULT '', pers_nom character varying(30) DEFAULT '' ) on commit drop ;
for r in select pers_id, pers_pat, pers_mat, pers_nom from personal
order by pers_pat, pers_mat, pers_nom
loop
if r.pers_pat = cpat and r.pers_mat= cmat and r.pers_nom= cnom then
insert into tmp_pers_dup (pers_id, pers_pat,pers_mat, pers_nom) values
(r.pers_id, r.pers_pat ,r.pers_mat, r.pers_nom);
end if;
cpat := r.pers_pat; cmat := r.pers_mat; cnom:= r.pers_nom;
end loop;
return query select pers_id, pers_pat ,pers_mat, pers_nom from tmp_persdup;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
ALTER FUNCTION base.duplicado_personal_hallar(character varying) OWNER TO postgres;
No hay comentarios:
Publicar un comentario