127 lines
4.6 KiB
SQL
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 |