FCLT#84940 Performance anonimiseer routines

svn path=/Database/trunk/; revision=65940
This commit is contained in:
Jos Groot Lipman
2024-08-19 12:39:33 +00:00
parent 4821d9944b
commit 9aeac78c9c
5 changed files with 55 additions and 48 deletions

View File

@@ -3,14 +3,22 @@
* $Id$
*/
CREATE_TRIGGER(bez_t_bez_afspraak_B_I)
BEFORE INSERT ON bez_afspraak
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bez_afspraak_key,bez_s_bez_afspraak_key);
END;
/
CREATE_TRIGGER(bez_t_bez_afspraak_B_IU)
BEFORE INSERT OR UPDATE ON bez_afspraak
FOR EACH ROW
DECLARE dummy NUMBER;
BEGIN
UPDATE_PRIMARY_KEY(bez_afspraak_key,bez_s_bez_afspraak_key);
dummy := :new.bez_afspraak_key;
IF sys_context('USERENV', 'ACTION') = 'ANONYMIZE' OR
sys_context('USERENV', 'ACTION') = 'DBUPGRADE' THEN
RETURN;
END IF;
IF :new.bez_afspraak_contact_key IS NULL AND :new.prs_perslid_key IS NOT NULL THEN
:new.bez_afspraak_contact_key := :new.prs_perslid_key;
@@ -62,8 +70,8 @@ BEGIN
END;
/
CREATE_TRIGGER(bez_t_bez_bezoekers_B_IU)
BEFORE INSERT OR UPDATE ON bez_bezoekers
CREATE_TRIGGER(bez_t_bez_bezoekers_B_I)
BEFORE INSERT ON bez_bezoekers
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bez_bezoekers_key,bez_s_bez_bezoekers_key);

View File

@@ -329,7 +329,7 @@ CREATE OR REPLACE PACKAGE BODY ano AS
THEN
-- 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.
-- Daardoor wordt de lcl "Ganonimiseerd" in vele gevallen niet blijvend in de gastheer 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.
@@ -412,6 +412,7 @@ CREATE OR REPLACE PACKAGE BODY ano AS
anonymize_period NUMBER := fac.safe_to_number (fac.getsetting ('anonymize_period'));
v_count NUMBER;
anonymize_mode NUMBER;
lcl_fac_anonymized fac_locale_xsl.fac_locale_xsl_tekst%TYPE := lcl.l('lcl_fac_anonymized');
-- Alle facturen die afgewezen of verwerkt zijn in de periode tussen de startdatum en de einddatum.
CURSOR c_factuur
@@ -479,6 +480,8 @@ CREATE OR REPLACE PACKAGE BODY ano AS
IF anonymize_mode > 0
THEN
DBMS_APPLICATION_INFO.SET_ACTION ('ANONYMIZE'); // Voorkomt eventueel triggers
v_count := 0;
FOR rec_f IN c_factuur
LOOP
@@ -542,18 +545,11 @@ CREATE OR REPLACE PACKAGE BODY ano AS
IF (BITAND(anonymize_mode, 8) = 8) -- vaste omschrijvingen
THEN
EXECUTE IMMEDIATE 'ALTER TRIGGER fin_t_fin_factuur_B_IU DISABLE';
BEGIN
-- Anonimiseren van tekstvelden in de factuur.
UPDATE fin_factuur
SET fin_factuur_opmerking = CASE WHEN fin_factuur_opmerking IS NOT NULL THEN lcl.l('lcl_fac_anonymized') END
, fin_factuur_opmerking_afw = CASE WHEN fin_factuur_opmerking_afw IS NOT NULL THEN lcl.l('lcl_fac_anonymized') END
WHERE fin_factuur_key = rec_f.fin_factuur_key;
EXCEPTION
WHEN OTHERS THEN
EXECUTE IMMEDIATE 'ALTER TRIGGER fin_t_fin_factuur_B_IU ENABLE';
END;
EXECUTE IMMEDIATE 'ALTER TRIGGER fin_t_fin_factuur_B_IU ENABLE';
-- Anonimiseren van tekstvelden in de factuur.
UPDATE fin_factuur
SET fin_factuur_opmerking = CASE WHEN fin_factuur_opmerking IS NOT NULL THEN lcl_fac_anonymized END
, fin_factuur_opmerking_afw = CASE WHEN fin_factuur_opmerking_afw IS NOT NULL THEN lcl_fac_anonymized END
WHERE fin_factuur_key = rec_f.fin_factuur_key;
END IF;
-- Anonimiseren van de factuur tracken.
@@ -592,7 +588,7 @@ CREATE OR REPLACE PACKAGE BODY ano AS
THEN
-- Anonimiseren van tekstvelden in de factuurregels van de factuur.
UPDATE fin_factuurregel
SET fin_factuurregel_omschrijving = CASE WHEN fin_factuurregel_omschrijving IS NOT NULL THEN lcl.l('lcl_fac_anonymized') END
SET fin_factuurregel_omschrijving = CASE WHEN fin_factuurregel_omschrijving IS NOT NULL THEN lcl_fac_anonymized END
WHERE fin_factuurregel_key = rec_r.fin_factuurregel_key;
END IF;
@@ -1051,6 +1047,7 @@ CREATE OR REPLACE PACKAGE BODY ano AS
prs_old_employee VARCHAR2 (100) := lcl.l('lcl_prs_old_employee');
v_count NUMBER;
anonymize_mode NUMBER;
lcl_fac_anonymized fac_locale_xsl.fac_locale_xsl_tekst%TYPE := lcl.l('lcl_fac_anonymized');
-- Alle personen die tussen de startdatum en de einddatum verwijderd zijn.
CURSOR c_reservering
@@ -1107,6 +1104,8 @@ CREATE OR REPLACE PACKAGE BODY ano AS
IF anonymize_mode > 0
THEN
DBMS_APPLICATION_INFO.SET_ACTION ('ANONYMIZE'); // Voorkomt eventuele triggers
v_count := 0;
FOR rec_r IN c_reservering
LOOP
@@ -1164,9 +1163,9 @@ CREATE OR REPLACE PACKAGE BODY ano AS
IF (BITAND(anonymize_mode, 8) = 8) -- vaste omschrijvingen
THEN
UPDATE res_rsv_ruimte
SET res_rsv_ruimte_omschrijving = CASE WHEN res_rsv_ruimte_omschrijving IS NOT NULL THEN lcl.l('lcl_fac_anonymized') END
, res_rsv_ruimte_opmerking = CASE WHEN res_rsv_ruimte_opmerking IS NOT NULL THEN lcl.l('lcl_fac_anonymized') END
, res_rsv_ruimte_telefoon = CASE WHEN res_rsv_ruimte_telefoon IS NOT NULL THEN lcl.l('lcl_fac_anonymized') END
SET res_rsv_ruimte_omschrijving = CASE WHEN res_rsv_ruimte_omschrijving IS NOT NULL THEN lcl_fac_anonymized END
, res_rsv_ruimte_opmerking = CASE WHEN res_rsv_ruimte_opmerking IS NOT NULL THEN lcl_fac_anonymized END
, res_rsv_ruimte_telefoon = CASE WHEN res_rsv_ruimte_telefoon IS NOT NULL THEN lcl_fac_anonymized END
WHERE res_rsv_ruimte_key = rec_r.res_rsv_ruimte_key;
END IF;
@@ -1188,7 +1187,7 @@ CREATE OR REPLACE PACKAGE BODY ano AS
PROCEDURE anonymizefull(p_flags NUMBER DEFAULT 65535)
AS
BEGIN
DBMS_APPLICATION_INFO.SET_ACTION ('ANONYMIZE'); // Voorkomt triggers die in de weg zitten
DBMS_APPLICATION_INFO.SET_ACTION ('ANONYMIZE'); // Voorkomt trigger bez_t_bez_afspraak_B_IU die in de weg kan zitten
-- Destructive obstrufication of personal data.
UPDATE prs_perslid
@@ -1282,24 +1281,16 @@ CREATE OR REPLACE PACKAGE BODY ano AS
SET prs_contactpersoon_email= 'EC' || TO_CHAR(prs_contactpersoon_key) || '@notexist.facilitor.nl'
WHERE prs_contactpersoon_email IS NOT NULL;
BEGIN
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 = (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';
EXCEPTION
WHEN OTHERS THEN
EXECUTE IMMEDIATE 'ALTER TRIGGER bez_t_bez_afspraak_B_IU ENABLE';
END;
UPDATE bez_afspraak
SET bez_afspraak_gastheer = INITCAP (DBMS_RANDOM.string ('l', LENGTH (bez_afspraak_gastheer)))
WHERE bez_afspraak_host_key IS NULL;
UPDATE bez_bezoekers
SET bez_afspraak_naam = UPPER(SUBSTR(bez_afspraak_naam,1,1)) || '. Bezoeker'

View File

@@ -3,8 +3,8 @@
* $Id$
*/
CREATE_TRIGGER(fin_t_fin_factuur_b_iu)
BEFORE INSERT OR UPDATE ON fin_factuur
CREATE_TRIGGER(fin_t_fin_factuur_b_i)
BEFORE INSERT ON fin_factuur
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(fin_factuur_key, fin_s_fin_factuur_key);
@@ -13,8 +13,8 @@ BEGIN
END;
/
CREATE_TRIGGER(fin_t_fin_factuurregel_b_iu)
BEFORE INSERT OR UPDATE ON fin_factuurregel
CREATE_TRIGGER(fin_t_fin_factuurregel_b_i)
BEFORE INSERT ON fin_factuurregel
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(fin_factuurregel_key, fin_s_fin_factuurregel_key);

View File

@@ -407,6 +407,11 @@ CREATE_TRIGGER(res_t_res_rsv_ruimte_B_IU)
BEFORE INSERT OR UPDATE ON res_rsv_ruimte
FOR EACH ROW
BEGIN
IF sys_context('USERENV', 'ACTION') = 'ANONYMIZE' OR
sys_context('USERENV', 'ACTION') = 'DBUPGRADE' THEN
RETURN;
END IF;
-- Niet waterdicht, meestal adequaat
IF NOT UPDATING('res_rsv_ruimte_satisfaction')
THEN

View File

@@ -112,9 +112,12 @@ ALTER TABLE mld_melding
MODIFY mld_melding_onderwerp_ai VARCHAR2(200);
/////////////////////////////////////////////////////////////////////////////////////////// MARX#80460
BEGIN
adm.tryalter('TABLE prs_bedrijfadres DROP CONSTRAINT prs_c_prs_bedrijfadrestype');
END;
ALTER TABLE prs_bedrijfadres DROP CONSTRAINT prs_c_prs_bedrijfadrestype;
/////////////////////////////////////////////////////////////////////////////////////////// FCLT#84940
DROP TRIGGER fin_t_fin_factuur_B_IU;
DROP TRIGGER fin_t_fin_factuurregel_B_IU;
DROP TRIGGER bez_t_bez_bezoekers_B_IU;
/////////////////////////////////////////////////////////////////////////////////////////// FCLT#00000