REM *************************************************************************** REM Hand-carved package body for INTEGRITY RULE created on 13-JAN-99 REM *************************************************************************** CREATE OR REPLACE PACKAGE BODY cihinr IS -- Generic post-process routines PROCEDURE check_delete(id number); sac_type constant varchar2(6) := 'CRU'; pac_type constant varchar2(6) := 'CLA'; pac_reference number; --======================== PRE-PROCESS (INS,UPD) ============================-- PROCEDURE pre_process(operation varchar2,id number, pl in out NOCOPY ciointegrity_rule.data) IS BEGIN -- Calculate the PAC reference which determines access control rights -- pac_reference := NVL(NVL(pl.v.entity_object_reference, pl.v.generic_class_reference), pl.v.view_object_reference); -- Access rights for integrity rule derive from the reference -- Access rights checking performed by triggers in config 4.0.9 -- ciiacc.check_access_rights(pac_reference,pac_type,'UPD'); -- Initialize unassigned properties with default values on INSERT if operation = 'INS' then pl.v.element_type_name := sac_type; pl.i.element_type_name := true; pl.v.classifier_rule_subtype := 'INR'; pl.i.classifier_rule_subtype := true; if pl.i.sequence = false then pl.v.sequence := ciiexp.default_seq(pl.v.pac_reference, 'INR', 10); pl.i.sequence := true; end if; /* rule_implementation moved to validator in 4.0.12 elsif operation = 'UPD' then if pl.v.method_reference IS NOT NULL and not pl.i.rule_implementation then pl.v.rule_implementation := 'USER'; pl.i.rule_implementation := true; elsif pl.v.rule_implementation != 'USER' and not pl.i.method_reference then pl.v.method_reference := NULL; pl.i.method_reference := true; end if; */ end if; if pl.i.entity_object_reference then pl.v.classifier_rule_for := 'EOC'; pl.i.classifier_rule_for := true; elsif pl.i.generic_class_reference then pl.v.classifier_rule_for := 'GEC'; pl.i.classifier_rule_for := true; elsif pl.i.view_object_reference then pl.v.classifier_rule_for := 'VOB'; pl.i.classifier_rule_for := true; end if; END; --======================== PRE-PROCESS (DEL,SEL) ============================-- PROCEDURE pre_process(operation varchar2,id number) IS BEGIN -- Access rights for integrity rule derive from the reference -- Access rights checking performed by triggers in config 4.0.9 -- ciiacc.check_access_rights(id,sac_type,operation,'SAC'); -- if operation is 'DELETE', make sure no non-cascading references exist if operation = 'DEL' then check_delete(id); end if; END; --===================== POST-PROCESS (INS,UPD,SEL) ==========================-- PROCEDURE post_process(operation varchar2,id number, pl ciointegrity_rule.data) IS cat_pac_ref number; inr_pac_ref number; BEGIN if pl.v.classifier_attribute_reference is not null then select cat.pac_reference, inr.pac_reference into cat_pac_ref, inr_pac_ref from ci_classifier_attributes cat ,ci_integrity_rules inr where cat.id = pl.v.classifier_attribute_reference and inr.id = pl.v.id; if cat_pac_ref != inr_pac_ref then --%0!s: Classifier must be same for Integrity Rule and classifier attribute ciierr.fatal(2146, ciiutl.identify(pl.v.id, 'INR')); end if; end if; END; --========================= POST PROCESS (DEL) ==============================-- PROCEDURE post_process(operation varchar2,id number) IS BEGIN null; END; --============================= CHECK DELETE ================================-- PROCEDURE check_delete(id number) IS dummy number; error_count number := 0; BEGIN null; END; --================================== END ====================================-- -- -- Package instantiation block -- BEGIN is_installed := true; END; /