Files
Customer/AA/aa_prs_pack.sql
Arthur Egberink b33a6028f0 AAES#24862 -- aanpassen lengte van prs_perslid_naam
svn path=/Customer/trunk/; revision=16330
2012-12-17 08:57:55 +00:00

1384 lines
55 KiB
SQL
Raw Blame History

CREATE OR REPLACE PACKAGE AAXX
AS
-- PACKAGES voor de perslid import functions
PROCEDURE set_prs_kenmerk (p_import_key IN NUMBER,
p_niveau IN VARCHAR2,
p_kenmerk_key IN NUMBER,
p_link_key IN NUMBER,
p_kenmerk_waarde IN VARCHAR2);
PROCEDURE prs_set_werkplek (p_perslid_key IN NUMBER,
p_ruimte_key IN NUMBER,
p_werkplek_volgnr IN NUMBER,
p_werkplek_omschrijving IN VARCHAR2,
p_wp_expliciet IN NUMBER,
p_errormsg OUT VARCHAR2,
p_errorhint OUT VARCHAR2);
PROCEDURE prs_update_werkplek (p_locatie_code IN VARCHAR2,
p_gebouw_code IN VARCHAR2,
p_verdieping_volgnr IN VARCHAR2,
p_ruimte_nr IN VARCHAR2,
p_werkplek_volgnr IN NUMBER,
p_werkplek_omschrijving IN VARCHAR2,
p_perslid_key IN NUMBER,
p_wp_expliciet IN NUMBER,
p_std_wp_ruimte_nr IN VARCHAR2,
p_errormsg OUT VARCHAR2,
p_errorhint OUT VARCHAR2);
PROCEDURE fac_gen_update_perslid (p_import_key IN NUMBER,
p_sleutelkolom IN VARCHAR2,
p_wp_mode IN NUMBER,
p_std_wp_ruimte_nr IN VARCHAR2);
PROCEDURE prs_del_perslid (p_import_key IN NUMBER,
p_perslid_key IN NUMBER,
p_wp_expliciet IN NUMBER);
PROCEDURE insert_perslid_from_mld (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2);
FUNCTION count_Work_Days_InclTime( pdate1 IN DATE , pdate2 IN DATE ) RETURN NUMBER;
FUNCTION count_Work_Days( pdate1 IN DATE , pdate2 IN DATE ) RETURN NUMBER;
END;
/
/* Formatted on 3/18/2011 10:07:59 AM (QP5 v5.136.908.31019) */
CREATE OR REPLACE PACKAGE BODY AAXX
AS
-- PACKAGE voor de perslid import functions
PROCEDURE set_prs_kenmerk (p_import_key IN NUMBER,
p_niveau IN VARCHAR2,
p_kenmerk_key IN NUMBER,
p_link_key IN NUMBER,
p_kenmerk_waarde IN VARCHAR2)
AS
v_count NUMBER;
v_hint VARCHAR2 (100);
v_aktie VARCHAR2 (100);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (200);
BEGIN
v_hint :=
' kenmerk '
|| p_niveau
|| ' kenmerk_key: '
|| p_kenmerk_key
|| ' link: '
|| p_link_key
|| ' waarde: '
|| p_kenmerk_waarde;
v_aktie := 'Toevoegen';
SELECT COUNT ( * )
INTO v_count
FROM prs_kenmerklink
WHERE prs_link_key = p_link_key
AND prs_kenmerklink_niveau = p_niveau
AND prs_kenmerk_key = p_kenmerk_key
AND prs_kenmerklink_verwijder IS NULL;
IF v_count = 1
THEN
IF p_kenmerk_waarde IS NULL
THEN
v_aktie := 'Verwijder';
DELETE prs_kenmerklink
WHERE prs_link_key = p_link_key
AND prs_kenmerklink_niveau = p_niveau
AND prs_kenmerk_key = p_kenmerk_key
AND prs_kenmerklink_verwijder IS NULL;
ELSE
v_aktie := 'Wijzigen';
UPDATE prs_kenmerklink
SET prs_kenmerklink_waarde = p_kenmerk_waarde
WHERE prs_link_key = p_link_key
AND prs_kenmerklink_niveau = p_niveau
AND prs_kenmerk_key = p_kenmerk_key
AND prs_kenmerklink_verwijder IS NULL;
END IF;
ELSE
v_aktie := 'Toevoegen';
IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL
THEN
INSERT INTO PRS_KENMERKLINK (PRS_KENMERK_KEY,
PRS_LINK_KEY,
PRS_KENMERKLINK_NIVEAU,
PRS_KENMERKLINK_WAARDE)
VALUES (p_kenmerk_key,
p_link_key,
p_niveau,
p_kenmerk_waarde);
END IF;
END IF;
--fac.imp_writelog (p_import_key, 'I', 'Verwerken kenmerk ' || v_aktie || ' kenmerk_key:' || p_kenmerk_key || ' waarde:'|| p_kenmerk_waarde || '-','');
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_aktie || ' - ' || v_hint);
END;
PROCEDURE prs_set_werkplek (p_perslid_key IN NUMBER,
p_ruimte_key IN NUMBER,
p_werkplek_volgnr IN NUMBER,
p_werkplek_omschrijving IN VARCHAR2,
p_wp_expliciet IN NUMBER,
p_errormsg OUT VARCHAR2,
p_errorhint OUT VARCHAR2)
IS
v_ruimte_nr VARCHAR2 (10);
v_werkplek_volgnr NUMBER (3);
v_werkplek_omschrijving VARCHAR2 (30);
v_werkplek_key NUMBER (10);
v_perslidwerkplek_key NUMBER (10);
v_huidige_ruimte_key NUMBER (10);
v_huidige_pwp_key NUMBER (10);
v_huidige_wp_key NUMBER (10);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
-- bepaal het ruimte_nummer voor de omschrijving van de werkplek
p_errorhint := 'Fout bij bepalen nieuwe ruimte ruimte_key:' || p_ruimte_key;
SELECT alg_ruimte_nr
INTO v_ruimte_nr
FROM alg_ruimte
WHERE alg_ruimte_key = p_ruimte_key;
-- vind de huidige hoofdwerkplek
p_errorhint := 'Fout bij zoeken naar de hoofdwerkplek.';
SELECT MAX (pwp.prs_perslidwerkplek_key)
INTO v_huidige_pwp_key
FROM prs_perslid p, prs_perslidwerkplek pwp, prs_werkplek wp
WHERE p.prs_perslid_key = p_perslid_key
AND p.prs_perslid_key = pwp.prs_perslid_key
AND pwp.prs_werkplek_key = wp.prs_werkplek_key
AND COALESCE (wp.prs_werkplek_virtueel, 0) <> '1'
AND pwp.prs_perslidwerkplek_volgnr = 1
AND pwp.prs_perslidwerkplek_verwijder IS NULL;
-- met de bijbehorende werkplek
IF v_huidige_pwp_key IS NOT NULL
THEN
p_errorhint := 'Fout bij bepalen of persoon al een werkplek heeft';
SELECT pwp.prs_werkplek_key
INTO v_huidige_wp_key
FROM prs_perslidwerkplek pwp
WHERE pwp.prs_perslidwerkplek_key = v_huidige_pwp_key;
END IF;
IF p_wp_expliciet = 1
THEN
IF p_werkplek_omschrijving IS NULL
THEN
v_werkplek_omschrijving :=
v_ruimte_nr || '/' || TO_CHAR (v_werkplek_volgnr);
ELSE
v_werkplek_omschrijving := p_werkplek_omschrijving;
END IF;
p_errorhint := 'Fout bij bepalen werkplekvolgnr.';
IF (p_werkplek_volgnr IS NOT NULL)
THEN
BEGIN
-- expliciete werkplekken
SELECT prs_werkplek_key
INTO v_werkplek_key
FROM prs_v_aanwezigwerkplek
WHERE prs_alg_ruimte_key = p_ruimte_key
AND prs_werkplek_volgnr = p_werkplek_volgnr;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
-- voeg werkplek maar toe
INSERT INTO prs_werkplek (prs_werkplek_module,
prs_werkplek_volgnr,
prs_werkplek_omschrijving,
prs_alg_ruimte_key)
VALUES ('PRR',
v_werkplek_volgnr,
v_werkplek_omschrijving,
p_ruimte_key)
RETURNING prs_werkplek_key
INTO v_werkplek_key;
END;
IF v_huidige_wp_key <> v_werkplek_key OR v_huidige_wp_key IS NULL
THEN
IF v_huidige_pwp_key IS NOT NULL
THEN
p_errorhint := 'Omhangen perslidwerkplek record.';
-- verplaatsen van de persoon
UPDATE prs_perslidwerkplek
SET prs_werkplek_key = v_werkplek_key
WHERE prs_perslidwerkplek_key = v_huidige_pwp_key;
v_perslidwerkplek_key := v_huidige_pwp_key;
ELSE
-- toevoegen van perslidwerkplek record
p_errorhint := 'Toevoegen perslidwerkplek record.';
INSERT INTO prs_perslidwerkplek (prs_perslid_key,
prs_werkplek_key,
prs_perslidwerkplek_volgnr)
VALUES (p_perslid_key, v_werkplek_key, 1)
RETURNING prs_perslidwerkplek_key
INTO v_perslidwerkplek_key;
END IF;
END IF;
ELSE
p_errormsg :=
'Geen werkplekvolgnummer gevonden bij expliciete werkplekken';
END IF;
ELSE -- impliciete werkplekken
-- kijk of de ruimte gelijk is aan de huidige ruimte
p_errorhint := 'Bepalen huidige ruimte.';
SELECT MAX (prs_alg_ruimte_key)
INTO v_huidige_ruimte_key
FROM prs_werkplek
WHERE prs_werkplek_key = v_huidige_wp_key;
IF v_huidige_ruimte_key <> p_ruimte_key
OR v_huidige_ruimte_key IS NULL
THEN
-- vind een lege werkplek in de huidige ruimte
p_errorhint := 'Bepalen lege werkplek in de ruimte.';
SELECT MIN (prs_werkplek_key)
INTO v_werkplek_key
FROM prs_werkplek w
WHERE (prs_werkplek_verwijder IS NOT NULL
OR NOT EXISTS
(SELECT prs_perslidwerkplek_key
FROM prs_perslidwerkplek pwp
WHERE pwp.prs_werkplek_key = w.prs_werkplek_key
AND pwp.prs_perslidwerkplek_verwijder IS NULL))
AND prs_alg_ruimte_key = p_ruimte_key;
IF v_werkplek_key IS NULL OR 1 = 1
THEN
-- geen lege werkplekken gevonden.
-- maak een nieuwe werkplek aan met als volgnummer het hoogste gevonden nummmer + 1
p_errorhint := 'Maak een nieuwe werkplek aan';
SELECT COALESCE (MAX (prs_werkplek_volgnr), 0) + 1
INTO v_werkplek_volgnr
FROM prs_werkplek
WHERE prs_alg_ruimte_key = p_ruimte_key;
INSERT INTO prs_werkplek (prs_werkplek_module,
prs_werkplek_volgnr,
prs_werkplek_omschrijving,
prs_alg_ruimte_key)
VALUES ('PRR',
v_werkplek_volgnr,
v_ruimte_nr || '/' || TO_CHAR (v_werkplek_volgnr),
p_ruimte_key)
RETURNING prs_werkplek_key
INTO v_werkplek_key;
ELSE
-- we hebben een werkplek gevonden waar nog geen personen aan gekoppeld waren
-- of die een verwijdervlag gezet heeft.
p_errorhint := 'Reanimeer een bestaande werkplek';
UPDATE prs_werkplek
SET prs_werkplek_verwijder = NULL
WHERE prs_werkplek_key = v_werkplek_key;
END IF;
-- nu hebben we een vrije werkplek
IF v_huidige_pwp_key IS NOT NULL
THEN
p_errorhint := 'Omhangen perslidwerkplek record.';
-- verplaatsen van de persoon
UPDATE prs_perslidwerkplek
SET prs_werkplek_key = v_werkplek_key
WHERE prs_perslidwerkplek_key = v_huidige_pwp_key;
v_perslidwerkplek_key := v_huidige_pwp_key;
ELSE
-- toevoegen van perslidwerkplek record
p_errorhint := 'Toevoegen perslidwerkplek record.';
INSERT INTO prs_perslidwerkplek (prs_perslid_key,
prs_werkplek_key,
prs_perslidwerkplek_volgnr)
VALUES (p_perslid_key, v_werkplek_key, 1)
RETURNING prs_perslidwerkplek_key
INTO v_perslidwerkplek_key;
END IF;
END IF;
END IF;
-- check of we nog iets moeten weggooien
IF v_huidige_pwp_key <> v_perslidwerkplek_key
OR (v_perslidwerkplek_key IS NULL AND v_huidige_pwp_key IS NOT NULL)
THEN
DELETE prs_perslidwerkplek
WHERE prs_perslidwerkplek_key = v_huidige_pwp_key;
END IF;
IF p_wp_expliciet <> 1
AND (v_huidige_wp_key <> v_werkplek_key
OR (v_werkplek_key IS NULL AND v_huidige_wp_key IS NOT NULL))
THEN
UPDATE prs_werkplek
SET prs_werkplek_verwijder = SYSDATE
WHERE prs_werkplek_key = v_huidige_wp_key;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
p_errormsg :=
' (ORACLE error number = <'
|| ORACLE_err_num
|| '> ORACLE error message = <'
|| ORACLE_err_mes
|| '>)';
END prs_set_werkplek;
PROCEDURE prs_update_werkplek (p_locatie_code IN VARCHAR2,
p_gebouw_code IN VARCHAR2,
p_verdieping_volgnr IN VARCHAR2,
p_ruimte_nr IN VARCHAR2,
p_werkplek_volgnr IN NUMBER,
p_werkplek_omschrijving IN VARCHAR2,
p_perslid_key IN NUMBER,
p_wp_expliciet IN NUMBER,
p_std_wp_ruimte_nr IN VARCHAR2,
p_errormsg OUT VARCHAR2,
p_errorhint OUT VARCHAR2)
IS
v_ruimte_key NUMBER (10);
v_locatie_key NUMBER (10);
v_gebouw_key NUMBER (10);
v_verdieping_key NUMBER (10);
v_ruimte_onveranderd NUMBER (1);
v_count NUMBER (10);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
p_errorhint :=
'Fout bij bepalen of persoon al een perslidwerkplek heeft';
v_ruimte_key := -1;
v_ruimte_onveranderd := 0;
-- laten we eerst maar even zoeken welke gegevens er boven tafel te krijgen zijn.
IF p_locatie_code IS NOT NULL
THEN
p_errorhint := 'Fout bij bepalen locatie [' || p_locatie_code || ']';
SELECT alg_locatie_key
INTO v_locatie_key
FROM alg_locatie
WHERE UPPER (alg_locatie_code) = UPPER (p_locatie_code)
AND alg_locatie_verwijder IS NULL;
IF p_gebouw_code IS NOT NULL
THEN
p_errorhint := 'Fout bij bepalen gebouw [' || p_gebouw_code || ']';
SELECT alg_gebouw_key
INTO v_gebouw_key
FROM alg_gebouw
WHERE UPPER (alg_gebouw_code) = UPPER (p_gebouw_code)
AND alg_gebouw_verwijder IS NULL
AND alg_locatie_key = v_locatie_key;
IF p_verdieping_volgnr IS NOT NULL
THEN
p_errorhint := 'Fout bij bepalen verdieping';
SELECT alg_verdieping_key
INTO v_verdieping_key
FROM alg_verdieping
WHERE alg_gebouw_key = v_gebouw_key
AND alg_verdieping_volgnr = p_verdieping_volgnr
AND alg_verdieping_verwijder IS NULL;
IF p_ruimte_nr IS NOT NULL
THEN
p_errorhint :=
'Fout bij bepalen ruimte ['
|| TO_CHAR (p_ruimte_nr)
|| ']';
SELECT alg_ruimte_key
INTO v_ruimte_key
FROM alg_ruimte
WHERE alg_verdieping_key = v_verdieping_key
AND alg_ruimte_verwijder IS NULL
AND UPPER (alg_ruimte_nr) = UPPER (p_ruimte_nr);
-- kijk of ik al een werkplek heb in deze kamer
SELECT COUNT (wp.prs_werkplek_key)
INTO v_count
FROM prs_werkplek wp, prs_perslidwerkplek pwp
WHERE pwp.prs_perslid_key = p_perslid_key
AND wp.prs_werkplek_key = pwp.prs_werkplek_key
AND wp.prs_alg_ruimte_key = v_ruimte_key
AND COALESCE (wp.prs_werkplek_virtueel, 0) = 0
AND pwp.prs_perslidwerkplek_verwijder IS NULL;
IF v_count = 0
THEN
v_ruimte_onveranderd := 0;
ELSE
v_ruimte_onveranderd := 1;
END IF;
ELSE
-- kijk of ik al een werkplek heb op deze verdieping
SELECT COUNT (wp.prs_werkplek_key)
INTO v_count
FROM prs_werkplek wp,
prs_perslidwerkplek pwp,
alg_ruimte r
WHERE pwp.prs_perslid_key = p_perslid_key
AND wp.prs_werkplek_key = pwp.prs_werkplek_key
AND wp.prs_alg_ruimte_key = r.alg_ruimte_key
AND COALESCE (wp.prs_werkplek_virtueel, 0) = 0
AND r.alg_verdieping_key = v_verdieping_key
AND pwp.prs_perslidwerkplek_verwijder IS NULL;
IF v_count = 0
THEN
-- vind de standaardruimte binnen de gevonden verdieping
SELECT MAX (alg_ruimte_key)
INTO v_ruimte_key
FROM alg_ruimte
WHERE alg_verdieping_key = v_verdieping_key
AND alg_ruimte_verwijder IS NULL
AND alg_ruimte_nr = p_std_wp_ruimte_nr;
ELSE
v_ruimte_onveranderd := 1;
END IF;
END IF;
ELSE
-- kijk of ik al een werkplek heb in dit gebouw
SELECT COUNT (wp.prs_werkplek_key)
INTO v_count
FROM prs_werkplek wp,
prs_perslidwerkplek pwp,
alg_ruimte r,
alg_verdieping v
WHERE pwp.prs_perslid_key = p_perslid_key
AND wp.prs_werkplek_key = pwp.prs_werkplek_key
AND wp.prs_alg_ruimte_key = r.alg_ruimte_key
AND COALESCE (wp.prs_werkplek_virtueel, 0) = 0
AND r.alg_verdieping_key = v.alg_verdieping_key
AND v.alg_gebouw_key = v_gebouw_key
AND pwp.prs_perslidwerkplek_verwijder IS NULL;
IF v_count = 0
THEN
-- vind de standaardruimte binnen het gevonden gebouw
SELECT MAX (alg_ruimte_key)
INTO v_ruimte_key
FROM alg_ruimte r, alg_verdieping v
WHERE v.alg_gebouw_key = v_gebouw_key
AND v.alg_verdieping_key = r.alg_verdieping_key
AND r.alg_ruimte_verwijder IS NULL
AND r.alg_ruimte_nr = p_std_wp_ruimte_nr;
ELSE
v_ruimte_onveranderd := 1;
END IF;
END IF;
ELSE
-- kijk of ik al een werkplek heb op deze locatie
SELECT COUNT (wp.prs_werkplek_key)
INTO v_count
FROM prs_werkplek wp,
prs_perslidwerkplek pwp,
alg_ruimte r,
alg_verdieping v,
alg_gebouw g
WHERE pwp.prs_perslid_key = p_perslid_key
AND wp.prs_werkplek_key = pwp.prs_werkplek_key
AND wp.prs_alg_ruimte_key = r.alg_ruimte_key
AND COALESCE (wp.prs_werkplek_virtueel, 0) = 0
AND r.alg_verdieping_key = v.alg_verdieping_key
AND v.alg_gebouw_key = g.alg_gebouw_key
AND g.alg_locatie_key = v_locatie_key
AND pwp.prs_perslidwerkplek_verwijder IS NULL;
IF v_count = 0
THEN
-- vind de standaardruimte binnen de gevonden locatie
SELECT MAX (alg_ruimte_key)
INTO v_ruimte_key
FROM alg_ruimte r, alg_verdieping v, alg_gebouw g
WHERE g.alg_locatie_key = v_locatie_key
AND g.alg_gebouw_key = v.alg_gebouw_key
AND v.alg_verdieping_key = r.alg_verdieping_key
AND r.alg_ruimte_verwijder IS NULL
AND r.alg_ruimte_nr = p_std_wp_ruimte_nr;
ELSE
v_ruimte_onveranderd := 1;
END IF;
END IF;
-- we hebben nu een ruimte_key voor de nieuwe werkplek
IF v_ruimte_onveranderd = 0
THEN
IF v_ruimte_key IS NOT NULL
THEN
prs_set_werkplek (p_perslid_key,
v_ruimte_key,
p_werkplek_volgnr,
p_werkplek_omschrijving,
p_wp_expliciet,
p_errormsg,
p_errorhint);
ELSE
p_errormsg := 'Kan geen standaardruimte met ruimtenr:<' || p_std_wp_ruimte_nr || '> vinden';
END IF;
END IF;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
p_errormsg :=
' (ORACLE error number = <'
|| ORACLE_err_num
|| '> ORACLE error message = <'
|| ORACLE_err_mes
|| '>)';
END prs_update_werkplek;
--
-- p_wp_mode (0 geen werkplekken 1, impliciet 2 expliciet)
--
PROCEDURE fac_gen_update_perslid (p_import_key IN NUMBER,
p_sleutelkolom IN VARCHAR2,
p_wp_mode IN NUMBER,
p_std_wp_ruimte_nr IN VARCHAR2)
IS
c_fielddelimitor VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
v_count NUMBER (10);
v_ongeldig NUMBER (1);
v_count_update NUMBER (10);
v_count_error NUMBER (10);
v_count_tot NUMBER (10);
v_wpcount_error NUMBER (10);
v_wp_expliciet NUMBER (10);
--
v_perslid_key NUMBER (10);
v_afdeling_key NUMBER (10);
v_srtperslid_key NUMBER (10);
CURSOR cSPERSLID
IS
SELECT MIN (prs_srtperslid_omschrijving) prs_srtperslid_omschrijving
FROM fac_imp_perslid i
WHERE NOT EXISTS
(SELECT prs_srtperslid_key
FROM prs_srtperslid sp
WHERE UPPER (sp.prs_srtperslid_omschrijving) =
UPPER (i.prs_srtperslid_omschrijving))
GROUP BY UPPER (prs_srtperslid_omschrijving);
recSPersLid cSPersLid%ROWTYPE;
CURSOR cPERSLID
IS
SELECT * FROM FAC_IMP_PERSLID;
recPersLid cPersLid%ROWTYPE;
BEGIN
v_count_update := 0;
v_count_tot := 0;
v_count_error := 0;
v_wpcount_error := 0;
FOR recSPersLid IN cSPersLid
LOOP
BEGIN
v_aanduiding := '';
v_errormsg := '';
v_errorhint := '';
v_count_tot := v_count_tot + 1;
v_aanduiding := recSPersLid.PRS_SRTPERSLID_OMSCHRIJVING;
v_errorhint := 'Fout bij toevoegen functie';
INSERT INTO prs_srtperslid (prs_srtperslid_omschrijving)
VALUES (recSPersLid.prs_srtperslid_omschrijving);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
' (ORACLE error number = <'
|| ORACLE_err_num
|| '> ORACLE error message = <'
|| ORACLE_err_mes
|| '>)';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint);
COMMIT; -- tbv logging
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
'Personeelsfunctie: toegevoegde regels zonder foutmelding: '
|| TO_CHAR (v_count_tot - v_count_error),
'');
fac.imp_writelog (
p_import_key,
'S',
'Personeelsfunctie: toegevoegde regels met foutmelding: '
|| TO_CHAR (v_count_error),
'');
COMMIT; -- logging
v_count_update := 0;
v_count_tot := 0;
v_count_error := 0;
FOR recPersLid IN cPersLid
LOOP
BEGIN
v_aanduiding := '';
v_errormsg := '';
v_errorhint := '';
v_count_tot := v_count_tot + 1;
v_aanduiding :=
recPersLid.prs_perslid_naam
|| '|'
|| recPersLid.prs_perslid_voornaam
|| '| ';
v_errormsg := '';
v_errorhint := 'Fout bij bepalen functie';
SELECT prs_srtperslid_key
INTO v_srtperslid_key
FROM prs_srtperslid
WHERE prs_srtperslid_verwijder IS NULL
AND UPPER (prs_srtperslid_omschrijving) =
UPPER (recPersLid.prs_srtperslid_omschrijving);
v_errorhint :=
'Afdeling niet gevonden ['
|| recPersLid.prs_afdeling_naam
|| ']';
SELECT prs_afdeling_key
INTO v_afdeling_key
FROM prs_afdeling
WHERE UPPER (prs_afdeling_naam) =
UPPER (recPersLid.prs_afdeling_naam)
AND prs_afdeling_verwijder IS NULL;
-- p_sleutelkolom
-- NR = prs_perslid_nr
-- EMAIL = prs_perslid_email
-- LOGIN = prs_perslid_oslogin
v_errorhint := 'Kijken of de persoon al bestaat';
SELECT MAX (prs_perslid_key), COUNT ( * )
INTO v_perslid_key, v_count
FROM prs_perslid
WHERE prs_perslid_verwijder IS NULL
AND ( (p_sleutelkolom IS NULL
AND UPPER (prs_perslid_naam) =
UPPER (recPersLid.prs_perslid_naam)
AND UPPER (prs_perslid_voornaam) =
UPPER (recPersLid.prs_perslid_voornaam))
OR (UPPER (p_sleutelkolom) = 'NR'
AND UPPER (prs_perslid_nr) =
UPPER (recPersLid.prs_perslid_nr)
OR UPPER (p_sleutelkolom) = 'EMAIL'
AND UPPER (prs_perslid_email) =
UPPER (recPersLid.prs_perslid_email)
OR UPPER (p_sleutelkolom) = 'LOGIN'
AND UPPER (prs_perslid_oslogin) =
UPPER (recPersLid.prs_perslid_oslogin)));
IF (v_count = 0)
THEN
v_errorhint := 'Fout bij toevoegen persoon';
INSERT INTO prs_perslid (prs_perslid_module,
prs_srtperslid_key,
prs_afdeling_key,
prs_perslid_naam,
prs_perslid_voorletters,
prs_perslid_tussenvoegsel,
prs_perslid_voornaam,
prs_perslid_telefoonnr,
prs_perslid_mobiel,
prs_perslid_email,
prs_perslid_nr,
prs_perslid_titel,
prs_perslid_oslogin)
VALUES ('PRS',
v_srtperslid_key,
v_afdeling_key,
recPersLid.prs_perslid_naam,
recPersLid.prs_perslid_voorletters,
recPersLid.prs_perslid_tussenvoegsel,
recPersLid.prs_perslid_voornaam,
recPersLid.prs_perslid_telefoonnr,
recPersLid.prs_perslid_mobiel,
recPersLid.prs_perslid_email,
recPersLid.prs_perslid_nr,
recPersLid.prs_perslid_titel,
recPersLid.prs_perslid_oslogin)
RETURNING prs_perslid_key
INTO v_perslid_key;
prs.setpassword(v_perslid_key, recPersLid.prs_perslid_wachtwoord);
COMMIT;
v_count_update := v_count_update + 1;
ELSIF v_count = 1
THEN
UPDATE prs_perslid
SET prs_srtperslid_key = v_srtperslid_key,
prs_afdeling_key = v_afdeling_key,
prs_perslid_naam = recPersLid.prs_perslid_naam,
prs_perslid_voorletters =
recPersLid.prs_perslid_voorletters,
prs_perslid_tussenvoegsel =
recPersLid.prs_perslid_tussenvoegsel,
prs_perslid_voornaam = recPersLid.prs_perslid_voornaam,
prs_perslid_nr = recPersLid.prs_perslid_nr,
prs_perslid_titel = recPersLid.prs_perslid_titel
WHERE prs_perslid_key = v_perslid_key;
IF recPersLid.prs_perslid_telefoonnr IS NOT NULL OR aaxx_get_user = 'ENEXIS'
THEN
UPDATE prs_perslid
SET prs_perslid_telefoonnr =
recPersLid.prs_perslid_telefoonnr
WHERE prs_perslid_key = v_perslid_key;
END IF;
IF recPersLid.prs_perslid_mobiel IS NOT NULL OR aaxx_get_user = 'ENEXIS'
THEN
UPDATE prs_perslid
SET prs_perslid_mobiel = recPersLid.prs_perslid_mobiel
WHERE prs_perslid_key = v_perslid_key;
END IF;
IF recPersLid.prs_perslid_email IS NOT NULL OR aaxx_get_user = 'ENEXIS'
THEN
UPDATE prs_perslid
SET prs_perslid_email = recPersLid.prs_perslid_email
WHERE prs_perslid_key = v_perslid_key;
END IF;
IF recPersLid.prs_perslid_oslogin IS NOT NULL OR aaxx_get_user = 'ENEXIS'
THEN
UPDATE prs_perslid
SET prs_perslid_oslogin = recPersLid.prs_perslid_oslogin
WHERE prs_perslid_key = v_perslid_key;
END IF;
IF recPersLid.prs_perslid_wachtwoord IS NOT NULL
THEN
prs.setpassword(v_perslid_key, recPersLid.prs_perslid_wachtwoord);
END IF;
END IF;
COMMIT; -- persoon in ieder geval toegevoegd.
IF p_wp_mode <> 0
THEN
IF p_wp_mode = 1
THEN
v_wp_expliciet := 0;
ELSE
v_wp_expliciet := 1;
END IF;
-- Werkplekken
v_aanduiding :=
recPersLid.PRS_PERSLID_NAAM
|| '|'
|| recPersLid.PRS_PERSLID_VOORNAAM
|| '|'
|| recPersLid.alg_locatie_code
|| '|'
|| recPersLid.alg_gebouw_code
|| '|'
|| recPersLid.alg_verdieping_volgnr
|| '|'
|| recPersLid.alg_ruimte_nr
|| '| ';
v_errormsg := '';
prs_update_werkplek (recPersLid.alg_locatie_code,
recPersLid.alg_gebouw_code,
recPersLid.alg_verdieping_volgnr,
recPersLid.alg_ruimte_nr,
recPersLid.prs_werkplek_volgnr,
recPersLid.prs_werkplek_omschrijving,
v_perslid_key,
v_wp_expliciet,
p_std_wp_ruimte_nr,
v_errormsg,
v_errorhint);
IF v_errormsg IS NOT NULL
THEN
v_wpcount_error := v_wpcount_error + 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
v_errorhint);
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
' (ORACLE error number = <'
|| ORACLE_err_num
|| '> ORACLE error message = <'
|| ORACLE_err_mes
|| '>)';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint);
COMMIT; -- tbv logging
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
'Persoon: verwerkte regels zonder foutmelding: '
|| TO_CHAR (v_count_tot - v_count_error),
'');
fac.imp_writelog (
p_import_key,
'S',
'Persoon: verwerkte regels met foutmelding: '
|| TO_CHAR (v_count_error),
'');
fac.imp_writelog (
p_import_key,
'S',
'Werkplek: verwerkte regels met foutmelding: '
|| TO_CHAR (v_wpcount_error),
'');
END fac_gen_update_perslid;
PROCEDURE prs_del_perslid (p_import_key IN NUMBER,
p_perslid_key IN NUMBER,
p_wp_expliciet IN NUMBER)
IS
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER (10);
--
v_perslid_key NUMBER (10);
v_perslid_naam VARCHAR (100);
v_perslid_nr VARCHAR (30);
BEGIN
BEGIN
v_errormsg := 'Verwijderen van de persoon is NIET gelukt';
v_errorhint :=
'Heeft de persoon met prs_perslid_key '
|| TO_CHAR (p_perslid_key)
|| ' historie?';
SELECT prs_perslid_naam_full, prs_perslid_nr
INTO v_perslid_naam, v_perslid_nr
FROM prs_perslid p, prs_v_perslid_fullnames pf
WHERE p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_perslid_key = p_perslid_key;
-- *** Budgethouderschap ***
-- Voor hoeveel kostenplaatsen is deze persoon budgethouder?
SELECT COUNT ( * )
INTO v_count
FROM prs_kostenplaats
WHERE prs_perslid_key = p_perslid_key;
IF (v_count > 0)
THEN
UPDATE prs_kostenplaats
SET prs_perslid_key = NULL
WHERE prs_perslid_key = p_perslid_key;
fac.imp_writelog (
p_import_key,
'I',
'Budgethouderschap van te verwijderen persoon ('
|| v_count
|| ' stuks) vervallen.',
'Naam/persoonsnr: ' || v_perslid_naam || '/' || v_perslid_nr);
END IF;
-- *** Vervangers ***
-- koppelingen met vervangers dienen ook verwijderd te worden
SELECT COUNT ( * )
INTO v_count
FROM prs_collega
WHERE prs_perslid_key = p_perslid_key
OR prs_perslid_key_alt = p_perslid_key;
IF (v_count > 0)
THEN
DELETE FROM prs_collega
WHERE prs_perslid_key = p_perslid_key
OR prs_perslid_key_alt = p_perslid_key;
fac.imp_writelog (
p_import_key,
'I',
'Te verwijderen persoon heeft vervanger(s). Koppeling(en) verwijderd.',
'Naam/persoonsnr: ' || v_perslid_naam || '/' || v_perslid_nr);
END IF;
-- *** werkplekken ***
IF p_wp_expliciet = 0
THEN
UPDATE prs_werkplek wp
SET prs_werkplek_verwijder = SYSDATE
WHERE EXISTS
(SELECT prs_perslidwerkplek_key
FROM prs_perslidwerkplek pwp
WHERE wp.prs_werkplek_key = pwp.prs_werkplek_key
AND pwp.prs_perslid_key = p_perslid_key);
END IF;
DELETE prs_perslidwerkplek
WHERE prs_perslid_key = p_perslid_key;
-- *** Verplichtingen ***
SELECT COUNT ( * )
INTO v_count
FROM prs_v_verplichting_refcheck vp
WHERE vp.prs_perslid_key = p_perslid_key;
IF v_count = 0
THEN
-- Persoon heeft geen enkele (actuele of historische) verplichting
v_errorhint :=
'Verwijderen van persoon met key ' || TO_CHAR (v_perslid_key);
DELETE FROM prs_perslid
WHERE prs_perslid_key = p_perslid_key;
fac.imp_writelog (
p_import_key,
'I',
'Persoon verwijderd.',
'Achternaam/persoonsnr: '
|| v_perslid_naam
|| '/'
|| v_perslid_nr);
ELSE
-- Controleer of er ACTUELE verplichtingen zijn
SELECT COUNT ( * )
INTO v_count
FROM prs_v_verplichting_keys vp
WHERE vp.prs_perslid_key = p_perslid_key;
IF v_count > 0
THEN
UPDATE prs_perslid
SET prs_perslid_naam =
SUBSTR ('INACTIEF:' || prs_perslid_naam, 1, 60),
prs_perslid_oslogin = DECODE(aaxx_get_user, 'IT', prs_perslid_oslogin, NULL)
WHERE prs_perslid_key = p_perslid_key
AND prs_perslid_naam NOT LIKE 'INACTIEF:%';
fac.imp_writelog (
p_import_key,
'I',
'Persoon als INACTIEF gemarkeerd of was al INACTIEF gemarkeerd.',
'Achternaam/persoonsnr: '
|| v_perslid_naam
|| '/'
|| v_perslid_nr);
ELSE
BEGIN
UPDATE prs_perslid
SET prs_perslid_verwijder = SYSDATE
WHERE prs_perslid_key = p_perslid_key;
fac.imp_writelog (
p_import_key,
'I',
'Persoon ge<67>nactiveerd.',
'Achternaam/persoonsnr: '
|| v_perslid_naam
|| '/'
|| v_perslid_nr);
EXCEPTION
WHEN OTHERS
THEN
-- Kennelijk heeft de persoon toch ernstige verplichtingen
v_errorhint :=
'Persoon heeft nog (max. '
|| TO_CHAR (v_count)
|| ') verplichtingen. Naam/persoonsnr: '
|| v_perslid_naam
|| '/'
|| v_perslid_nr;
fac.imp_writelog (p_import_key,
'I',
'Inactiveren persoon is niet gelukt',
v_errorhint);
END;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'(ORACLE error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint);
END;
END prs_del_perslid;
PROCEDURE insert_perslid_from_mld (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
IS
CURSOR C
IS
SELECT (SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_srtkenmerk_key = 201)
achternaam,
(SELECT UPPER(SUBSTR(fac_usrdata_omschr,1,1))
FROM mld_kenmerkmelding km, mld_kenmerk k, fac_usrdata ud
WHERE km.mld_kenmerkmelding_waarde = ud.fac_usrdata_key
AND km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_srtkenmerk_key = 202)
geslacht,
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_srtkenmerk_key = 203)
tussenvoegsel,
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_srtkenmerk_key = 204)
voorletters,
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_srtkenmerk_key = 205)
voornaam,
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_srtkenmerk_key = 206)
titel,
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_srtkenmerk_key = 208)
telefoon,
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_srtkenmerk_key = 209)
mobiel,
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_srtkenmerk_key = 210)
email,
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_srtkenmerk_key = 211)
login,
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_srtkenmerk_key = 212)
organisatie,
mld_melding_key
FROM mld_melding m
WHERE mld_stdmelding_key = 221 AND mld_melding_status IN (2, 3);
v_prs_srtperslid_key NUMBER(10);
v_count NUMBER(10);
v_prs_afdeling_key NUMBER(10);
v_fac_profiel_key NUMBER(10);
v_facilitor_key NUMBER(10);
v_prs_perslid_key NUMBER(10);
v_error_msg VARCHAR2(1000);
BEGIN
v_prs_srtperslid_key := 1; -- onbekend
v_fac_profiel_key := 1; -- 500 euro
v_facilitor_key := 4; -- key van Facilitor user
v_error_msg := NULL;
FOR rec IN c
LOOP
BEGIN
BEGIN
SELECT MIN(prs_afdeling_key)
INTO v_prs_afdeling_key
FROM prs_afdeling
WHERE prs_kostenplaats_key = rec.organisatie
AND prs_afdeling_verwijder IS NULL;
IF v_prs_afdeling_key IS NULL THEN
v_error_msg := 'Geen geldige afdeling gevonden';
ELSE
SELECT COUNT(prs_perslid_key)
INTO v_count
FROM prs_perslid
WHERE prs_perslid_oslogin = UPPER(rec.login)
AND prs_perslid_verwijder IS NULL;
IF v_count <> 0 THEN
v_error_msg := 'Persoon met deze login komt al voor.';
ELSE
INSERT INTO prs_perslid (prs_perslid_module,
prs_srtperslid_key,
prs_afdeling_key,
prs_perslid_naam,
prs_perslid_voorletters,
prs_perslid_tussenvoegsel,
prs_perslid_voornaam,
prs_perslid_telefoonnr,
prs_perslid_mobiel,
prs_perslid_email,
prs_perslid_titel,
prs_perslid_geslacht,
fac_profiel_key,
prs_perslid_oslogin)
VALUES ('PRS',
v_prs_srtperslid_key,
v_prs_afdeling_key,
substr(rec.achternaam,1,30),
substr(rec.voorletters,1,10),
substr(rec.tussenvoegsel,1,15),
substr(rec.voornaam,1,30),
substr(rec.telefoon,1,15),
substr(rec.mobiel,1,15),
substr(rec.email,1,200),
substr(rec.titel,1,15),
DECODE (rec.geslacht, 'M', 1, 0),
v_fac_profiel_key,
substr(rec.login,1,30))
RETURNING prs_perslid_key
INTO v_prs_perslid_key;
END IF;
END IF;
EXCEPTION WHEN OTHERS THEN
v_error_msg := 'Onbekende fout opgetreden tijdens het toevoegen van de persoon.\nNeem contact op met de beheerder.';
v_error_msg := v_error_msg + SUBSTR (SQLERRM, 1, 200);
END;
IF v_error_msg IS NULL THEN
BEGIN
-- accepteren van de melding.
mld.setmeldingstatus(rec.mld_melding_key, 4, v_facilitor_key);
mld.setmeldingstatus(rec.mld_melding_key, 5, v_facilitor_key);
UPDATE mld_melding
SET mld_melding_opmerking = 'Persoon is aangemaakt.'
WHERE mld_melding_key = rec.mld_melding_key;
mld.mld_nextworkflowstep (rec.mld_melding_key, 0);
END;
ELSE
BEGIN
mld.setmeldingstatus(rec.mld_melding_key, 1, v_facilitor_key);
UPDATE mld_melding
SET mld_melding_opmerking = v_error_msg
WHERE mld_melding_key = rec.mld_melding_key;
END;
END IF;
END;
END LOOP;
END insert_perslid_from_mld;
-- Return number of workdays between two dates, not including the startdate, weekends and holidays
FUNCTION count_Work_Days0( pdate1 IN DATE , pdate2 IN DATE, pInclTime IN BOOLEAN ) RETURN NUMBER IS
eikdag NUMBER;
v_date_from DATE;
v_date_to DATE;
v_time_from NUMBER;
v_time_to NUMBER;
v_extra_day NUMBER;
lbackwards BOOLEAN;
v_week NUMBER;
v_mod NUMBER;
v_day_from NUMBER;
v_day_to NUMBER;
v_holidays NUMBER;
BEGIN
-- Remove time-part from dates (ie. set to 0:00) and set dates chronologically
IF pdate1 > pdate2 THEN
v_date_from := TRUNC(pdate2);
v_date_to := TRUNC(pdate1);
v_time_from := to_char(pdate2,'sssss');
v_time_to := to_char(pdate1,'sssss');
lbackwards := TRUE;
ELSE
v_date_from := TRUNC(pdate1);
v_date_to := TRUNC(pdate2);
v_time_from := to_char(pdate1,'sssss');
v_time_to := to_char(pdate2,'sssss');
lbackwards := FALSE;
END IF;
-- Determine whole weeks (v_week) and remaining days (v_mod) between FROM and TO
v_week := trunc((v_date_to - v_date_from)/7);
v_mod := mod((v_date_to - v_date_from),7);
-- Correct remaining days (v_mod) depending on the FROM and TO "day-number"
v_day_from := MOD (TO_CHAR (v_date_from, 'J') + 1, 7) + 1;
v_day_to := MOD (TO_CHAR (v_date_to, 'J') + 1, 7) + 1;
IF v_day_from = 1 THEN /* FROM is sunday */
IF v_day_to = 7 THEN /* TO is saturday */
v_mod := v_mod - 1; /* should always be 5! */
END IF;
ELSIF v_day_from = 7 THEN /* FROM is saturday */
IF v_day_to != 7 THEN /* TO is not saturday */
v_mod := v_mod - 1; /* exclude sunday succeding FROM-saturday */
END IF;
ELSE /* FROM is workday */
IF v_day_to = 7 THEN /* TO is saturday */
v_mod := v_mod - 1; /* exclude TO-saturday */
ELSIF v_day_to < v_day_from THEN /* weekend between FROM and TO */
v_mod := v_mod - 2; /* exclude weekend */
END IF;
END IF;
v_extra_day := 0;
IF pInclTime THEN
IF v_time_to > v_time_from THEN
v_extra_day := 1;
END IF;
END IF;
-- Determine the registered holidays between FROM+1 (excluding startdate!) and TO
SELECT count(*)
INTO v_holidays
FROM MLD_VRIJE_DAGEN
WHERE MLD_VRIJE_DAGEN_DATUM BETWEEN v_date_from+1 AND v_date_to;
IF lbackwards THEN
RETURN 0 - (5 * v_week + v_mod + v_extra_day - v_holidays);
ELSE
RETURN 5 * v_week + v_mod + v_extra_day - v_holidays;
END IF;
EXCEPTION
WHEN OTHERS THEN RETURN NULL;
END;
FUNCTION count_Work_Days_InclTime( pdate1 IN DATE , pdate2 IN DATE ) RETURN NUMBER IS
BEGIN
RETURN count_Work_Days0(pdate1,pdate2, TRUE);
END;
FUNCTION count_Work_Days( pdate1 IN DATE , pdate2 IN DATE ) RETURN NUMBER IS
BEGIN
RETURN count_Work_Days0(pdate1,pdate2, FALSE);
END;
END;
/