Files
Customer/onces/FMHN/FMHN#71214.sql
Sander Schepers 6cec585b24 FMHN#71214 Dubbele personen verwijderen
svn path=/Customer/; revision=55089
2022-02-23 09:19:43 +00:00

127 lines
4.6 KiB
SQL

--
-- $Id$
--
-- De IDM broker heeft onbedoeld personen dubbel aangeleverd.
-- Het zijn nogal wat records (18000+), dus daarom via een once.
-- De laatste toegevoegde (obv emailadres) moet worden verwijderd.
-- Oftewel, 1 emailadres die 4 keer voorkomt, moet de laatste prs_perslid_key behouden, rest mag weg (leegmaken)
DEFINE thisfile = 'FMHN#71214.sql'
DEFINE dbuser = '^FMHN'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
COLUMN fcltcusterr NEW_VALUE fcltcusterr NOPRINT;
WHENEVER SQLERROR CONTINUE;
SELECT adm.getscriptspoolfile ('&thisfile') AS fcltlogfile FROM DUAL;
SPOOL &fcltlogfile
WHENEVER SQLERROR EXIT;
SELECT adm.checkscriptcust ('&dbuser') AS fcltcusterr FROM DUAL;
WHENEVER SQLERROR CONTINUE;
PROMPT &fcltcusterr
SET DEFINE OFF
------ payload begin ------
DECLARE
v_perslid_key NUMBER (15);
v_km_externnr NUMBER (15);
v_max NUMBER (15);
v_min NUMBER (15);
CURSOR c IS
SELECT p.prs_perslid_key,
p.prs_perslid_email,
p.prs_perslid_externid,
(SELECT km.prs_kenmerklink_waarde
FROM prs_kenmerklink km
WHERE km.prs_kenmerklink_verwijder IS NULL
AND km.prs_kenmerk_key = 1009 --Persoonskenmerk 'identificatienr'
AND km.prs_kenmerklink_niveau = 'P'
AND km.prs_link_key = p.prs_perslid_key)
AS km_externnr,
p.prs_perslid_externsyncdate,
p.prs_perslid_verwijder,
(SELECT MAX (
fac.safe_to_number (
SUBSTR (x.prs_perslid_externid, 3)))
FROM prs_perslid x
WHERE x.prs_perslid_email = p.prs_perslid_email
AND x.prs_perslid_verwijder IS NULL)
AS max_id,
(SELECT MIN (
fac.safe_to_number (
SUBSTR (x.prs_perslid_externid, 3)))
FROM prs_perslid x
WHERE x.prs_perslid_email = p.prs_perslid_email
AND x.prs_perslid_verwijder IS NULL)
AS min_id
FROM prs_perslid p
WHERE p.prs_perslid_verwijder IS NULL
AND SUBSTR (prs_perslid_externid, 0, 2) = '03' --Ministerie IenW
AND p.prs_perslid_email IS NOT NULL
AND p.prs_perslid_email IN
( SELECT prs_perslid_email
FROM prs_perslid
WHERE prs_perslid_verwijder IS NULL
AND prs_perslid_email IS NOT NULL
GROUP BY prs_perslid_email
HAVING COUNT (*) > 1);
-- ORDER BY p.prs_perslid_key DESC;
BEGIN
FOR rec IN c
LOOP
v_km_externnr := fac.safe_to_number (rec.km_externnr);
v_max := rec.max_id;
v_min := rec.min_id;
IF v_km_externnr = v_min -- deze persoon moet behouden blijven, hiervan moet het externnummer worden gewijzigd
THEN
BEGIN
UPDATE prs_perslid p
SET p.prs_perslid_externid = '03' || v_max --03 voor Ministerie IenW!!!
WHERE p.prs_perslid_key = rec.prs_perslid_key;
UPDATE prs_kenmerklink km
SET prs_kenmerklink_waarde = v_max
WHERE km.prs_kenmerk_key = 1009 -- Kenmerk identificatienr
AND km.prs_kenmerklink_verwijder IS NULL
AND km.prs_kenmerklink_niveau = 'P'
AND km.prs_link_key = rec.prs_perslid_key;
fac.trackaction (
'PRSUPD',
rec.prs_perslid_key,
3,
SYSDATE,
'Persoon gewijzigd, externnr was '
|| rec.km_externnr
|| ' en wordt '
|| v_max);
END;
END IF;
IF v_km_externnr <> v_min -- deze persoon mag verwijderd worden
THEN
BEGIN
UPDATE prs_perslid p
SET p.prs_perslid_verwijder = SYSDATE
WHERE p.prs_perslid_key = rec.prs_perslid_key;
END;
END IF;
END LOOP;
END;
/
COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile