Files
Database/FAC/FAC_PACANO.SRC
2022-06-28 13:06:31 +00:00

766 lines
36 KiB
Plaintext

#ifdef MLD
/*
* $Revision$
* $Id$
*/
#undef TRUNC
CREATE OR REPLACE PACKAGE ano AS
PROCEDURE anonymizebes (p_startdatum IN DATE, p_einddatum IN DATE);
PROCEDURE anonymizebez (p_startdatum IN DATE, p_einddatum IN DATE);
PROCEDURE anonymizemld (p_startdatum IN DATE, p_einddatum IN DATE);
PROCEDURE anonymizeprs (p_startdatum IN DATE, p_einddatum IN DATE);
PROCEDURE anonymizefull(p_flags NUMBER DEFAULT 65535);
PROCEDURE anonymize (p_startdatum IN DATE, p_einddatum IN DATE);
FUNCTION postcode(postcode_veld IN VARCHAR2) RETURN VARCHAR2;
FUNCTION telefoon(telefoon_veld IN VARCHAR2) RETURN VARCHAR2;
FUNCTION adres(adres_veld IN VARCHAR2) RETURN VARCHAR2;
FUNCTION naam(naam_veld IN VARCHAR2) RETURN VARCHAR2;
FUNCTION email(email_veld IN VARCHAR2) RETURN VARCHAR2;
FUNCTION memo(memo_veld IN VARCHAR2) RETURN VARCHAR2;
END ano;
/
CREATE OR REPLACE PACKAGE BODY ano AS
PROCEDURE anonymizebes (p_startdatum IN DATE,
p_einddatum IN DATE)
AS
anonymize_period NUMBER := fac.safe_to_number (fac.getsetting ('anonymize_period'));
v_count NUMBER;
-- Alle bestellingen waarvan de afwijsdatum, alles geleverd datum, verwerkingsdatum of annuleringsdatum tussen de startdatum en de einddatum liggen.
CURSOR c_bestelling
IS
SELECT b.bes_bestelling_key
FROM bes_bestelling b
WHERE (SELECT MAX(ft.fac_tracking_datum)
FROM fac_tracking ft
WHERE ft.fac_tracking_refkey = b.bes_bestelling_key
AND ft.fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
FROM fac_srtnotificatie
WHERE fac_srtnotificatie_xmlnode = 'bestelling'
--AND fac_srtnotificatie_code != 'BESANO' -- Vervangen door "fac_srtnotificatie_key != key" hieronder. Blijkt veel sneller te zijn.
AND fac_srtnotificatie_key != (SELECT fac_srtnotificatie_key
FROM fac_srtnotificatie
WHERE fac_srtnotificatie_code = 'BESANO')
)) BETWEEN p_startdatum AND p_einddatum
AND b.bes_bestelling_status IN (1, 6, 7, 8)
AND NOT EXISTS
(SELECT ft.fac_tracking_key
FROM fac_tracking ft
WHERE ft.fac_tracking_refkey = b.bes_bestelling_key
AND ft.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key
FROM fac_srtnotificatie
WHERE fac_srtnotificatie_code = 'BESANO'))
ORDER BY b.bes_bestelling_key;
BEGIN
IF p_einddatum > SYSDATE - anonymize_period + 1
THEN
raise_application_error(-20001, 'ano_m001 Einddatum is te groot');
END IF;
v_count := 0;
FOR rec_b IN c_bestelling
LOOP
-- Verwijder alle kenmerkwaarden van de bestelling waarvan het &8 (BITAND) bit van het bes_srtkenmerk.bes_srtkenmerk_systeem veld is gezet.
DELETE FROM bes_kenmerkbestell bkbl
WHERE bkbl.bes_bestelling_key = rec_b.bes_bestelling_key
AND bkbl.bes_kenmerk_key IN (SELECT bk.bes_kenmerk_key
FROM bes_kenmerk bk,
bes_srtkenmerk bsk
WHERE bk.bes_srtkenmerk_key = bsk.bes_srtkenmerk_key
AND bk.bes_kenmerk_key = bkbl.bes_kenmerk_key
AND BITAND(bsk.bes_srtkenmerk_systeem, 8) = 8);
-- Verwijder alle kenmerkwaarden van de bestelopdrachten van de bestelling waarvan het &8 (BITAND) bit van het bes_srtkenmerk.bes_srtkenmerk_systeem veld is gezet.
DELETE FROM bes_kenmerkbesteli bkbi
WHERE bkbi.bes_bestelling_item_key IN (SELECT bi.bes_bestelling_item_key
FROM bes_bestelling_item bi
WHERE bi.bes_bestelling_key = rec_b.bes_bestelling_key)
AND bkbi.bes_kenmerk_key IN (SELECT bk.bes_kenmerk_key
FROM bes_kenmerk bk,
bes_srtkenmerk bsk
WHERE bk.bes_srtkenmerk_key = bsk.bes_srtkenmerk_key
AND bk.bes_kenmerk_key = bkbi.bes_kenmerk_key
AND BITAND(bsk.bes_srtkenmerk_systeem, 8) = 8);
-- Alle BES tracking anonimiseren m.b.t. de bestelling.
UPDATE fac_tracking
SET fac_tracking_oms = NULL
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
FROM fac_srtnotificatie
WHERE fac_srtnotificatie_xmlnode = 'bestelling'
AND fac_srtnotificatie_code != 'BESANO')
AND fac_tracking_refkey = rec_b.bes_bestelling_key
AND fac_tracking_oms IS NOT NULL;
-- Anonimiseren van de bestelling tracken.
fac.trackaction('BESANO', rec_b.bes_bestelling_key, NULL, NULL, NULL);
-- Anonimiseren bestelopdrachten.
FOR rec_bo IN (SELECT bo.bes_bestelopdr_key
FROM bes_bestelopdr bo,
bes_bestelopdr_item boi,
bes_bestelling_item bi
WHERE bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key
AND bi.bes_bestelling_key = rec_b.bes_bestelling_key)
LOOP
-- Alle BES tracking anonimiseren m.b.t. de bestelopdracht van de bestelling.
UPDATE fac_tracking
SET fac_tracking_oms = NULL
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
FROM fac_srtnotificatie
WHERE fac_srtnotificatie_xmlnode = 'bestelopdr'
AND fac_srtnotificatie_code != 'BES2AN')
AND fac_tracking_refkey = rec_bo.bes_bestelopdr_key
AND fac_tracking_oms IS NOT NULL;
-- Anonimiseren van de bestelopdracht tracken.
fac.trackaction('BES2AN', rec_bo.bes_bestelopdr_key, NULL, NULL, NULL);
END LOOP;
IF v_count >= 1000
THEN
COMMIT;
v_count := 0;
ELSE
v_count := v_count + 1;
END IF;
END LOOP;
END;
PROCEDURE anonymizebez (p_startdatum IN DATE,
p_einddatum IN DATE)
AS
anonymize_period NUMBER := fac.safe_to_number (fac.getsetting ('anonymize_period'));
bez_generic_visitor VARCHAR2 (2001) := lcl.l('lcl_bez_generic_visitor');
v_count NUMBER;
-- Alle afspraken die tussen de startdatum en de einddatum liggen.
CURSOR c_afspraak
IS
SELECT bez_afspraak_key
FROM bez_afspraak
WHERE bez_afspraak_datum BETWEEN p_startdatum AND p_einddatum
AND NOT EXISTS
(SELECT ft.fac_tracking_key
FROM fac_tracking ft
WHERE ft.fac_tracking_refkey = bez_afspraak_key
AND ft.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key
FROM fac_srtnotificatie
WHERE fac_srtnotificatie_code = 'BEZANO'))
ORDER BY bez_afspraak_key;
BEGIN
IF p_einddatum > SYSDATE - anonymize_period + 1
THEN
raise_application_error(-20001, 'ano_m001 Einddatum is te groot');
END IF;
v_count := 0;
FOR rec IN c_afspraak
LOOP
-- Verwijder alle kenmerkwaarden van bezoekers van de afspraak waarvan het &8 (BITAND) bit van het bez_kenmerk.bez_kenmerk_systeem veld is gezet.
DELETE FROM bez_kenmerkwaarde bkw
WHERE bkw.bez_bezoekers_key IN (SELECT b.bez_bezoekers_key
FROM bez_bezoekers b
WHERE b.bez_afspraak_key = rec.bez_afspraak_key)
AND bkw.bez_kenmerk_key IN (SELECT bk.bez_kenmerk_key
FROM bez_kenmerk bk
WHERE bk.bez_kenmerk_key = bkw.bez_kenmerk_key
AND BITAND(bk.bez_kenmerk_systeem, 8) = 8);
-- Anonimiseer alle bezoekers.
UPDATE bez_bezoekers
SET bez_afspraak_naam = bez_generic_visitor,
bez_afspraak_bedrijf = NULL,
bez_afspraak_opmerking = NULL,
bez_bezoekers_telefoon = NULL,
bez_bezoekers_email = NULL,
bez_bezoekers_kenteken = NULL
WHERE bez_afspraak_key = rec.bez_afspraak_key;
-- Anonimiseer alle afspraken.
-- Door de trigger in de update wordt automatische de naam van de host in de gastheer geplakt.
-- Daardoor wordt de lcl "Ganonimiseerd" in vele gevallen niet blijvend in de gasheer gezet.
-- De persoon (prs record) moet daarom eerst aangepast worden.
-- Tijdens het anonimiseren van de persoon wordt daarom de bez_afspraak_gastheer ook geanonimiseerd.
-- In de gevallen dat er geen host wordt gebruikt en alleen tekst voor de persoon (gastheer) wordt ingevuld wordt het veld wel blijvend gezet.
UPDATE bez_afspraak
SET bez_afspraak_gastheer = bez_generic_visitor,
bez_afspraak_telefoonnr = NULL,
bez_afspraak_opmerking = NULL
WHERE bez_afspraak_key = rec.bez_afspraak_key;
-- Alle BEZ tracking anonimiseren m.b.t. de afspraak.
UPDATE fac_tracking
SET fac_tracking_oms = NULL
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
FROM fac_srtnotificatie
WHERE fac_srtnotificatie_xmlnode = 'afspraak'
AND fac_srtnotificatie_code != 'BEZANO')
AND fac_tracking_refkey = rec.bez_afspraak_key
AND fac_tracking_oms IS NOT NULL;
-- Alle BEZ tracking anonimiseren m.b.t. de bezoekers van de afspraak.
UPDATE fac_tracking
SET fac_tracking_oms = NULL
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
FROM fac_srtnotificatie
WHERE fac_srtnotificatie_xmlnode = 'bezoeker')
AND fac_tracking_refkey IN (SELECT bb.bez_bezoekers_key FROM bez_bezoekers bb WHERE bb.bez_afspraak_key = rec.bez_afspraak_key)
AND fac_tracking_oms IS NOT NULL;
-- Anonimiseren van de afspraak tracken.
fac.trackaction('BEZANO', rec.bez_afspraak_key, NULL, NULL, NULL);
IF v_count >= 1000
THEN
COMMIT;
v_count := 0;
ELSE
v_count := v_count + 1;
END IF;
END LOOP;
END;
PROCEDURE anonymizemld (p_startdatum IN DATE,
p_einddatum IN DATE)
AS
anonymize_period NUMBER := fac.safe_to_number (fac.getsetting ('anonymize_period'));
v_count NUMBER;
-- Alle meldingen waarvan de afwijsdatum of verwerkingsdatum tussen de startdatum en de einddatum liggen.
CURSOR c_melding
IS
SELECT m.mld_melding_key
FROM mld_melding m
WHERE (SELECT MAX(ft.fac_tracking_datum)
FROM fac_tracking ft
WHERE ft.fac_tracking_refkey = m.mld_melding_key
AND ft.fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
FROM fac_srtnotificatie
WHERE fac_srtnotificatie_xmlnode = 'melding'
--AND fac_srtnotificatie_code != 'MLDANO' -- Vervangen door "fac_srtnotificatie_key != key" hieronder. Blijkt veel sneller te zijn.
AND fac_srtnotificatie_key != (SELECT fac_srtnotificatie_key
FROM fac_srtnotificatie
WHERE fac_srtnotificatie_code = 'MLDANO')
)) BETWEEN p_startdatum AND p_einddatum
AND m.mld_melding_status IN (1, 6)
AND NOT EXISTS
(SELECT ft.fac_tracking_key
FROM fac_tracking ft
WHERE ft.fac_tracking_refkey = m.mld_melding_key
AND ft.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key
FROM fac_srtnotificatie
WHERE fac_srtnotificatie_code = 'MLDANO'))
ORDER BY m.mld_melding_key;
BEGIN
IF p_einddatum > SYSDATE - anonymize_period + 1
THEN
raise_application_error(-20001, 'ano_m001 Einddatum is te groot');
END IF;
v_count := 0;
FOR rec_m IN c_melding
LOOP
-- Verwijder alle kenmerkwaarden van de melding waarvan het &8 (BITAND) bit van het mld_srtkenmerk.mld_srtkenmerk_systeem veld is gezet.
DELETE FROM mld_kenmerkmelding mkm
WHERE mkm.mld_melding_key = rec_m.mld_melding_key
AND mkm.mld_kenmerk_key IN (SELECT mk.mld_kenmerk_key
FROM mld_kenmerk mk,
mld_srtkenmerk msk
WHERE mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
AND mk.mld_kenmerk_key = mkm.mld_kenmerk_key
AND BITAND(msk.mld_srtkenmerk_systeem, 8) = 8);
-- Verwijder alle kenmerkwaarden van de opdrachten van de melding waarvan het &8 (BITAND) bit van het mld_srtkenmerk.mld_srtkenmerk_systeem veld is gezet.
DELETE FROM mld_kenmerkopdr mko
WHERE mko.mld_opdr_key IN (SELECT mo.mld_opdr_key
FROM mld_opdr mo
WHERE mo.mld_melding_key = rec_m.mld_melding_key)
AND mko.mld_kenmerk_key IN (SELECT mk.mld_kenmerk_key
FROM mld_kenmerk mk,
mld_srtkenmerk msk
WHERE mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
AND mk.mld_kenmerk_key = mko.mld_kenmerk_key
AND BITAND(msk.mld_srtkenmerk_systeem, 8) = 8);
-- Alle MLD tracking anonimiseren m.b.t. de melding.
UPDATE fac_tracking
SET fac_tracking_oms = NULL
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
FROM fac_srtnotificatie
WHERE fac_srtnotificatie_xmlnode = 'melding'
AND fac_srtnotificatie_code != 'MLDANO')
AND fac_tracking_refkey = rec_m.mld_melding_key
AND fac_tracking_oms IS NOT NULL;
-- Anonimiseren van de melding tracken.
fac.trackaction('MLDANO', rec_m.mld_melding_key, NULL, NULL, NULL);
-- Anonimiseren opdrachten melding.
FOR rec_o IN (SELECT mld_opdr_key
FROM mld_opdr
WHERE mld_melding_key = rec_m.mld_melding_key)
LOOP
-- Alle MLD tracking anonimiseren m.b.t. de opdrachten van de melding.
UPDATE fac_tracking
SET fac_tracking_oms = NULL
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
FROM fac_srtnotificatie
WHERE fac_srtnotificatie_xmlnode = 'opdracht'
AND fac_srtnotificatie_code != 'ORDANO')
AND fac_tracking_refkey = rec_o.mld_opdr_key
AND fac_tracking_oms IS NOT NULL;
-- Anonimiseren van de meldingsopdracht tracken.
fac.trackaction('ORDANO', rec_o.mld_opdr_key, NULL, NULL, NULL);
END LOOP;
IF v_count >= 1000
THEN
COMMIT;
v_count := 0;
ELSE
v_count := v_count + 1;
END IF;
END LOOP;
END;
PROCEDURE anonymizeprs (p_startdatum IN DATE,
p_einddatum IN DATE)
AS
anonymize_period NUMBER := fac.safe_to_number (fac.getsetting ('anonymize_period'));
bez_generic_visitor VARCHAR2 (2001) := lcl.l('lcl_bez_generic_visitor');
prs_old_employee VARCHAR2 (100) := lcl.l('lcl_prs_old_employee');
v_count NUMBER;
-- Alle personen die tussen de startdatum en de einddatum verwijderd zijn.
CURSOR c_perslid
IS
SELECT '[' || TO_CHAR (p.prs_perslid_key) || '|' || p.prs_perslid_naam || '|' || p.prs_perslid_email || '] ' aanduiding,
p.prs_perslid_key
FROM prs_perslid p
WHERE p.prs_perslid_verwijder IS NOT NULL
AND p.prs_perslid_verwijder BETWEEN p_startdatum AND p_einddatum
AND NOT EXISTS
(SELECT ft.fac_tracking_key
FROM fac_tracking ft
WHERE ft.fac_tracking_refkey = p.prs_perslid_key
AND ft.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key
FROM fac_srtnotificatie
WHERE fac_srtnotificatie_code = 'PRSANO'))
ORDER BY 2;
BEGIN
IF p_einddatum > SYSDATE - anonymize_period + 1
THEN
raise_application_error(-20001, 'ano_m001 Einddatum is te groot');
END IF;
v_count := 0;
FOR rec IN c_perslid
LOOP
BEGIN
-- Verwijder alle kenmerkwaarden van de persoon waarvan het &8 (BITAND) bit van het prs_kenmerk.prs_kenmerk_systeem veld is gezet.
DELETE FROM prs_kenmerklink pkl
WHERE pkl.prs_kenmerklink_niveau = 'P'
AND pkl.prs_link_key = rec.prs_perslid_key
AND pkl.prs_kenmerk_key IN (SELECT pk.prs_kenmerk_key
FROM prs_kenmerk pk
WHERE pk.prs_kenmerk_key = pkl.prs_kenmerk_key
AND BITAND(pk.prs_kenmerk_systeem, 8) = 8);
-- Persoon anonimiseren.
UPDATE prs_perslid
SET prs_perslid_naam = prs_old_employee,
prs_perslid_tussenvoegsel = NULL,
prs_perslid_voorletters = NULL,
prs_perslid_voornaam = NULL,
prs_perslid_titel = NULL,
prs_perslid_initialen = NULL,
prs_perslid_geslacht = NULL,
prs_perslid_nr = NULL,
prs_perslid_telefoonnr = NULL,
prs_perslid_mobiel = NULL,
prs_perslid_email = NULL,
prs_perslid_oslogin = NULL,
prs_perslid_oslogin2 = NULL,
prs_perslid_uurloon = NULL,
alg_onroerendgoed_keys = NULL,
alg_onroerendgoed_type = NULL
WHERE prs_perslid_key = rec.prs_perslid_key;
-- Van al zijn afspraken waar hij host was, ook de naam van de host (=veld gastheer) anonimiseren.
-- Door update gebeurd dit eigenlijk al automatisch maar dan moet de persoon al wel eerst geanonimiseerd zijn.
UPDATE bez_afspraak
SET bez_afspraak_gastheer = bez_generic_visitor
WHERE bez_afspraak_host_key = rec.prs_perslid_key;
-- Alle PRSXXX tracking anonimiseren. De PRSLOG tracking moet verwijderd worden.
UPDATE fac_tracking
SET fac_tracking_oms = NULL
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
FROM fac_srtnotificatie
WHERE fac_srtnotificatie_code LIKE 'PRS%'
AND fac_srtnotificatie_code != 'PRSLOG'
AND fac_srtnotificatie_code != 'PRSANO')
AND fac_tracking_refkey = rec.prs_perslid_key
AND fac_tracking_oms IS NOT NULL;
-- PRSLOG Tracking verwijderen.
DELETE FROM fac_tracking
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
FROM fac_srtnotificatie
WHERE fac_srtnotificatie_code = 'PRSLOG')
AND fac_tracking_refkey = rec.prs_perslid_key;
-- Anonimiseren van de persoon tracken.
fac.trackaction('PRSANO', rec.prs_perslid_key, NULL, NULL, NULL);
IF v_count >= 1000
THEN
COMMIT;
v_count := 0;
ELSE
v_count := v_count + 1;
END IF;
END;
END LOOP;
END;
PROCEDURE anonymizefull(p_flags NUMBER DEFAULT 65535)
AS
BEGIN
-- Destructive obstrufication of personal data.
UPDATE prs_perslid
SET prs_perslid_naam = INITCAP (DBMS_RANDOM.string ('l', LENGTH (prs_perslid_naam)))
WHERE prs_perslid_naam NOT LIKE 'INACTIEF:%'
AND prs_perslid_naam NOT LIKE 'Facilitor'
AND (prs_perslid_oslogin IS NULL OR SUBSTR(prs_perslid_oslogin, 1, 1) <> '_');
UPDATE prs_perslid
SET prs_perslid_voornaam = INITCAP (DBMS_RANDOM.string ('l', LENGTH (prs_perslid_voornaam)))
WHERE prs_perslid_voornaam IS NOT NULL
AND (prs_perslid_oslogin IS NULL OR SUBSTR(prs_perslid_oslogin, 1, 1) <> '_');
UPDATE prs_perslid
SET prs_perslid_voorletters = UPPER (DBMS_RANDOM.string ('l', LENGTH (prs_perslid_voorletters)))
WHERE prs_perslid_voorletters IS NOT NULL;
UPDATE prs_perslid
SET prs_perslid_naam = 'INACTIEF:' || INITCAP (DBMS_RANDOM.string ('l', LENGTH (prs_perslid_naam) - 9))
WHERE prs_perslid_naam LIKE 'INACTIEF:%';
UPDATE prs_perslid
SET prs_perslid_email = 'P' || TO_CHAR(prs_perslid_key) || '@notexist.facilitor.nl'
WHERE prs_perslid_email IS NOT NULL;
UPDATE prs_perslid
SET prs_perslid_oslogin2='O' || TO_CHAR(prs_perslid_key)
WHERE prs_perslid_oslogin2 IS NOT NULL;
UPDATE prs_perslid
SET prs_perslid_wachtwoord_hash = null;
UPDATE prs_perslid
SET prs_perslid_apikey = 'TEST_' || dbms_utility.get_hash_value(prs_perslid_apikey , 0, power(2,24))
WHERE prs_perslid_apikey IS NOT NULL;
DELETE FROM fac_imp_perslid;
UPDATE prs_contactpersoon
SET prs_contactpersoon_naam = INITCAP (DBMS_RANDOM.string ('l', LENGTH(prs_contactpersoon_naam)));
UPDATE prs_contactpersoon
SET prs_contactpersoon_voornaam = INITCAP (DBMS_RANDOM.string ('l', LENGTH(prs_contactpersoon_voornaam)))
WHERE prs_contactpersoon_voornaam IS NOT NULL;
UPDATE prs_contactpersoon
SET prs_contactpersoon_voorletters = SUBSTR(prs_contactpersoon_voornaam,1,1) || SUBSTR(prs_contactpersoon_voorletters,2)
WHERE prs_contactpersoon_voorletters IS NOT NULL;
UPDATE prs_contactpersoon
SET prs_contactpersoon_email= 'EC' || TO_CHAR(prs_contactpersoon_key) || '@notexist.facilitor.nl'
WHERE prs_contactpersoon_email IS NOT NULL;
EXECUTE IMMEDIATE 'ALTER TRIGGER bez_t_bez_afspraak_B_IU DISABLE';
UPDATE bez_afspraak
SET bez_afspraak_gastheer = (SELECT SUBSTR(prs_perslid_naam_full,1,50)
FROM prs_v_perslid_fullnames_all
WHERE prs_perslid_key = bez_afspraak_host_key
)
WHERE bez_afspraak_host_key IS NOT NULL;
UPDATE bez_afspraak
SET bez_afspraak_gastheer = INITCAP (DBMS_RANDOM.string ('l', LENGTH (bez_afspraak_gastheer)))
WHERE bez_afspraak_host_key IS NULL;
EXECUTE IMMEDIATE 'ALTER TRIGGER bez_t_bez_afspraak_B_IU ENABLE';
UPDATE bez_bezoekers
SET bez_afspraak_naam = UPPER(SUBSTR(bez_afspraak_naam,1,1)) || '. Bezoeker'
WHERE bez_afspraak_naam IS NOT NULL
AND bez_afspraak_naam <> 'Anoniem';
UPDATE bez_bezoekers
SET bez_afspraak_bedrijf = UPPER(SUBSTR(bez_afspraak_bedrijf,1,1)) || 'areon B.V.'
WHERE bez_afspraak_bedrijf IS NOT NULL
AND bez_afspraak_bedrijf <> 'Anoniem';
UPDATE prs_bedrijf
SET prs_bedrijf_naam = ano.naam(prs_bedrijf_naam)
, prs_bedrijf_post_adres = ano.adres(prs_bedrijf_post_adres)
, prs_bedrijf_post_postcode = ano.postcode(prs_bedrijf_post_postcode)
, prs_bedrijf_bezoek_adres = ano.adres(prs_bedrijf_bezoek_adres)
, prs_bedrijf_bezoek_postcode = ano.postcode(prs_bedrijf_bezoek_postcode)
, prs_bedrijf_telefoon = ano.telefoon(prs_bedrijf_telefoon)
, prs_bedrijf_telefoon2 = ano.telefoon(prs_bedrijf_telefoon2)
, prs_bedrijf_fax = ano.telefoon(prs_bedrijf_fax)
, prs_bedrijf_email = ano.email(prs_bedrijf_email)
, prs_bedrijf_contact_persoon = ano.naam(prs_bedrijf_contact_persoon)
, prs_bedrijf_contact_telefoon = ano.telefoon(prs_bedrijf_contact_telefoon)
, prs_bedrijf_contact_fax = ano.telefoon(prs_bedrijf_contact_fax);
UPDATE prs_bedrijfadres
SET prs_bedrijfadres_url = ano.email(prs_bedrijfadres_url)
, prs_bedrijfadres_username = ano.naam(prs_bedrijfadres_username)
, prs_bedrijfadres_password = NULL;
UPDATE aut_idp
SET aut_idp_secret = 'TEST_' || DBMS_RANDOM.string('a', 10)
WHERE aut_idp_secret IS NOT NULL
AND aut_idp_internal = 0;
UPDATE aut_sp
SET aut_sp_secret = 'TEST_' || DBMS_RANDOM.string('a', 10)
WHERE aut_sp_secret IS NOT NULL
AND aut_sp_internal = 0;
UPDATE mld_adres
SET mld_adres_bezoek_adres = ano.adres(mld_adres_bezoek_adres)
, mld_adres_bezoek_postcode = ano.postcode(mld_adres_bezoek_postcode)
, mld_adres_post_adres = ano.adres(mld_adres_post_adres)
, mld_adres_post_postcode = ano.postcode(mld_adres_post_postcode)
, mld_adres_contactpersoon = ano.naam(mld_adres_contactpersoon)
, mld_adres_contactpers_telefoon = ano.telefoon(mld_adres_contactpers_telefoon)
, mld_adres_contactpers_email = ano.email(mld_adres_contactpers_email)
, mld_adres_telefoon = ano.telefoon(mld_adres_telefoon)
, mld_adres_email = ano.email(mld_adres_email);
UPDATE mld_melding
SET mld_melding_naam_ext = ano.naam(mld_melding_naam_ext)
, mld_melding_email_ext = ano.email(mld_melding_email_ext)
, mld_melding_tel_ext = ano.telefoon(mld_melding_tel_ext);
UPDATE mld_opdr
SET mld_opdr_contactpersoon = ano.naam(mld_opdr_contactpersoon)
WHERE mld_opdr_contactpersoon IS NOT NULL;
UPDATE mld_disc_params
SET mld_disc_params_emailnw1 = ano.email(mld_disc_params_emailnw1)
, mld_disc_params_emailnw2 = ano.email(mld_disc_params_emailnw2)
, mld_disc_params_emailnw3 = ano.email(mld_disc_params_emailnw3)
, mld_disc_params_emailnw4 = ano.email(mld_disc_params_emailnw4)
, mld_disc_params_smsnw1 = ano.telefoon(mld_disc_params_smsnw1)
, mld_disc_params_smsnw2 = ano.telefoon(mld_disc_params_smsnw2)
, mld_disc_params_smsnw3 = ano.telefoon(mld_disc_params_smsnw3)
, mld_disc_params_smsnw4 = ano.telefoon(mld_disc_params_smsnw4)
WHERE mld_ins_discipline_key IN (SELECT ins_discipline_key
FROM mld_discipline);
UPDATE fin_verkoopfactuur
SET prs_debiteur_naam = ano.naam(prs_debiteur_naam)
WHERE prs_debiteur_naam IS NOT NULL;
END;
PROCEDURE anonymize (p_startdatum IN DATE,
p_einddatum IN DATE)
AS
BEGIN
anonymizebes(p_startdatum, p_einddatum);
anonymizebez(p_startdatum, p_einddatum);
anonymizemld(p_startdatum, p_einddatum);
anonymizeprs(p_startdatum, p_einddatum);
END;
FUNCTION postcode(postcode_veld IN VARCHAR2) RETURN VARCHAR2
IS
c VARCHAR2(1);
code VARCHAR2(15) := '';
BEGIN
IF (postcode_veld IS NOT NULL)
THEN
FOR i IN 1..LENGTH(SUBSTR(postcode_veld,1,15))
LOOP
c := SUBSTR(postcode_veld,i,1);
BEGIN
c := TO_CHAR(TO_NUMBER(c));
c := TO_CHAR(TRUNC(DBMS_RANDOM.value(0,10)));
EXCEPTION
WHEN VALUE_ERROR THEN
IF (c NOT IN (' ','-'))
THEN
c := DBMS_RANDOM.string('u',1);
END IF;
END;
code := code||c;
END LOOP;
END IF;
RETURN code;
END postcode;
FUNCTION telefoon(telefoon_veld IN VARCHAR2) RETURN VARCHAR2
IS
n NUMBER;
r NUMBER;
i NUMBER;
f VARCHAR2(5) := '+-_ *'; -- alleen deze laten we staan
tel VARCHAR2(30) := '';
c VARCHAR2(1);
BEGIN
IF (telefoon_veld IS NOT NULL)
THEN
n := DBMS_RANDOM.value(0,1);
tel := TO_CHAR(TRUNC(n * POWER(10,LENGTH(telefoon_veld))));
FOR r IN 0..3
LOOP
c := SUBSTR(f,r,1);
i := 1;
WHILE (INSTR(telefoon_veld, c, 1, i) > 0)
LOOP
tel := REGEXP_REPLACE(tel
,'(^.{'||(INSTR(telefoon_veld,c,1,i)-1)||'})(.{1})(.*)$'
,'\1'||c||'\3'
);
i := i + 1;
END LOOP;
END LOOP;
END IF;
RETURN tel;
END telefoon;
FUNCTION adres(adres_veld IN VARCHAR2) RETURN VARCHAR2
IS
c VARCHAR2(1);
adres VARCHAR2(100) := '';
BEGIN
IF (adres_veld IS NOT NULL)
THEN
FOR i IN 1..LENGTH(adres_veld)
LOOP
c := SUBSTR(adres_veld,i,1);
BEGIN
c := TO_CHAR(TO_NUMBER(c));
EXCEPTION
WHEN VALUE_ERROR THEN
IF (c <> ' ')
THEN
c := DBMS_RANDOM.string('l',1);
END IF;
END;
adres := adres||c;
END LOOP;
END IF;
RETURN INITCAP(adres);
END adres;
FUNCTION email(email_veld IN VARCHAR2) RETURN VARCHAR2
IS
s NUMBER;
c VARCHAR2(1);
p VARCHAR2(9) := '';
z VARCHAR2(3) := '';
email VARCHAR2(500) := '';
BEGIN
IF (email_veld IS NOT NULL)
THEN
s := 1+INSTR(email_veld,':',1);
IF (s > 1)
THEN
p := SUBSTR(email_veld,1,s-1);
IF (SUBSTR(email_veld,s,2) = '//')
THEN
s := s+2;
p := p||'//';
END IF;
END IF;
IF (SUBSTR(email_veld,LENGTH(email_veld)-2,1) = '.')
THEN
z := SUBSTR(email_veld, -3);
END IF;
FOR i IN s..(LENGTH(email_veld)-NVL(LENGTH(z),0))
LOOP
c := SUBSTR(email_veld,i,1);
IF (c NOT IN ('.','@'))
THEN
c := DBMS_RANDOM.string('l',1);
END IF;
email := email||c;
END LOOP;
email := p||email||z;
END IF;
RETURN email;
END email;
FUNCTION naam(naam_veld IN VARCHAR2) RETURN VARCHAR2
IS
a NUMBER;
i VARCHAR2(1);
v VARCHAR2(55) := '';
naam VARCHAR2(200) := '';
BEGIN
IF (naam_veld IS NOT NULL)
THEN
a := LENGTH(naam_veld)-1;
IF (SUBSTR(naam_veld,LENGTH(naam_veld),1) = ')' AND INSTR(naam_veld,'(',-1) > 0)
THEN
v := DBMS_RANDOM.string('l',LENGTH(naam_veld) - INSTR(naam_veld,'(',-1) -1);
v := ' ('||SUBSTR(v,1,50)||')';
a := LENGTH(naam_veld) - LENGTH(v) -1;
END IF;
i := SUBSTR(naam_veld,1,1);
naam := UPPER(i)||DBMS_RANDOM.string('l', a)||v;
END IF;
RETURN naam;
END naam;
FUNCTION memo(memo_veld IN VARCHAR2) RETURN VARCHAR2
IS
memo VARCHAR2(4000) := '';
c VARCHAR2(1) := '';
r VARCHAR2(1);
BEGIN
IF (memo_veld IS NOT NULL)
THEN
FOR i IN 1..LENGTH(memo_veld)
LOOP
r := SUBSTR(memo_veld,i,1);
IF (r NOT IN (' ','.') )
THEN
c := DBMS_RANDOM.string('l',1);
IF (r = UPPER(r))
THEN
c := UPPER(c);
END IF;
ELSE
c := r;
END IF;
memo := memo||c;
END LOOP;
END IF;
RETURN memo;
END memo;
END ano;
/
REGISTERRUN('$Id$')
#endif // ANO