First Commit - Source Code from Reply

This commit is contained in:
vincenzofariello
2024-05-13 12:54:14 +02:00
parent 73e32a5020
commit a15aee1f08
11184 changed files with 1065913 additions and 0 deletions

View File

@@ -0,0 +1,81 @@
ALTER TABLE DWH_SVIL.MNP_DW_SLA_3GG_OUT
DROP PRIMARY KEY CASCADE;
DROP TABLE DWH_SVIL.MNP_DW_SLA_3GG_OUT CASCADE CONSTRAINTS;
CREATE TABLE DWH_SVIL.MNP_DW_SLA_3GG_OUT
(
ID_RICHIESTA VARCHAR2(23 BYTE) NOT NULL,
TIPO_MESSAGGIO VARCHAR2(23 BYTE) NOT NULL,
ID_PROG NUMBER NOT NULL,
DATA_MESSAGGIO DATE NOT NULL,
DONOR_EFFETTIVO VARCHAR2(4 BYTE) NOT NULL,
RECIPIENT_EFFETTIVO VARCHAR2(4 BYTE) NOT NULL,
TERZA_PARTE VARCHAR2(4 BYTE),
NOME_FILE VARCHAR2(27 BYTE) NOT NULL,
NUMERO_GIORNI_RITARDO NUMBER DEFAULT 0 NOT NULL,
PENALE NUMBER DEFAULT 0 NOT NULL,
T_INIZIALE DATE NOT NULL,
T_FINALE DATE NOT NULL,
PROCESSO VARCHAR2(1 BYTE) NOT NULL,
DATA_CUT_OVER DATE NOT NULL
)
TABLESPACE TAB_SMALL
PCTUSED 40
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 10M
NEXT 10M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT
)
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
NOMONITORING;
CREATE UNIQUE INDEX DWH_SVIL.MNP_DW_SLA_3GG_OUT_PK ON DWH_SVIL.MNP_DW_SLA_3GG_OUT
(ID_RICHIESTA, TIPO_MESSAGGIO, ID_PROG)
LOGGING
TABLESPACE TAB_SMALL
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 10M
NEXT 10M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT
)
NOPARALLEL;
ALTER TABLE DWH_SVIL.MNP_DW_SLA_3GG_OUT ADD (
CONSTRAINT MNP_DW_SLA_3GG_OUT_PK
PRIMARY KEY
(ID_RICHIESTA, TIPO_MESSAGGIO, ID_PROG)
USING INDEX
TABLESPACE TAB_SMALL
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 10M
NEXT 10M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
FREELISTS 1
FREELIST GROUPS 1
));

View File

@@ -0,0 +1,147 @@
CREATE OR REPLACE PROCEDURE DWH."CALCOLO_SLA_TC" (dataRif IN DATE)
AS
mese_in NUMBER;
anno_in NUMBER;
data_in DATE;
data_iniziale DATE;
cod_errore NUMBER;
mesecomp varchar2(7);
BEGIN
cod_errore := 0;
data_in := add_months(dataRif,-1);
mese_in := to_number(to_char(data_in,'MM'),'99');
anno_in := to_number(to_char(data_in,'YYYY'),'9999');
mesecomp := to_char(data_in,'MM/YYYY');
DBMS_OUTPUT.put_line('Mese da calcolare : ' || mese_in);
DBMS_OUTPUT.put_line('Anno da calcolare : ' || anno_in);
--------------------------------------------------------------------
--- FACCIO UNA DELETE PREVENTIVA DELLA TABELLA PER IL MESE INTERESSATO DAL CALCOLO
--------------------------------------------------------------------
DELETE dwh.mnp_dw_sla_tc_out WHERE to_char(data_messaggio,'YYYYMM')=to_char(data_in,'YYYY')||to_char(data_in,'MM');
COMMIT;
DBMS_OUTPUT.put_line('primo step -1');
data_iniziale := to_date('1-'|| mese_in||'-'|| anno_in,'DD-MM-YYYY');
DBMS_OUTPUT.put_line('primo step');
-- CARICAMENTO DATI
-- caricamento dati nella tabella temporanea MNP_DW_SLA_TC_IN
dwh.caricamento_sla_tc(mese_in,anno_in, cod_errore);
DBMS_OUTPUT.put_line('secondo step');
IF cod_errore = 0
THEN
-- tutto a posto
DBMS_OUTPUT.put_line ('Avvio procedura di calcolo delle penali');
END IF;
-- CALCOLO SLA X (2 giorni)
-- calcolo i giorni di ritardo per lo SLAX
UPDATE dwh.mnp_dw_sla_tc_out SET
numero_giorni_ritardo = TRUNC(TRUNC(t_finale) - TRUNC(fun_giorni_piu(t_iniziale,2)))
,data_attesa_evento_fin=fun_giorni_piu(t_iniziale,2)
WHERE tipo_messaggio = 'SLA X'
AND numero_giorni_ritardo IS NULL;
-- CALCOLO SLA Y (5 giorni)
-- calcolo i giorni di ritardo per lo SLAY
UPDATE dwh.mnp_dw_sla_tc_out SET
numero_giorni_ritardo = TRUNC(TRUNC(t_finale) - TRUNC(fun_giorni_piu(t_iniziale,5)))
,data_attesa_evento_fin=fun_giorni_piu(t_iniziale,5)
WHERE tipo_messaggio = 'SLA Y'
AND numero_giorni_ritardo IS NULL;
-- CALCOLO SLA Z (5 giorni)
-- calcolo i giorni di ritardo per lo SLAZ
UPDATE dwh.mnp_dw_sla_tc_out SET
numero_giorni_ritardo = TRUNC(TRUNC(t_finale) - TRUNC(fun_giorni_piu(t_iniziale,5)))
,data_attesa_evento_fin=fun_giorni_piu(t_iniziale,5)
WHERE tipo_messaggio = 'SLA Z'
AND numero_giorni_ritardo IS NULL;
-- ######################################### --
-- ## AGGIORNAMENTO FLAG_PENALE_ALTRO_AOM ## --
-- ######################################### --
-- QUESTA UPDATE FA SI CHE TUTTI GLI EVENTI 'SLA X', 'SLA Y' E 'SLA Z' APPENA CARICATI
-- VENGANO IMPOSTATI CON IL FLAG A N se e' PRESENTE UN RITARDO
UPDATE DWH.MNP_DW_SLA_TC_OUT
SET IS_PENALE_ALTRO_AOM = 'N'
WHERE IS_PENALE_ALTRO_AOM IS NULL AND PROCESSO <> 'V' AND MESE_COMP_FINALE = mesecomp
AND numero_giorni_ritardo > 0;
-- CALCOLO FLAG PENALE ALTRO AOM SLA X DONOR
-- LA WHERE CONDITION IS_PENALE_ALTRO_AOM IS NULL FA SI CHE CONSIDERI SOLO I DATI APPENA INSERITI
UPDATE DWH.MNP_DW_SLA_TC_OUT
SET IS_PENALE_ALTRO_AOM = 'Y'
WHERE TIPO_MESSAGGIO='SLA X' AND IS_PENALE_ALTRO_AOM IS NULL AND PROCESSO = 'D' AND MESE_COMP_FINALE = mesecomp
AND TRUNC( TRUNC(T_FINALE_ALTRO_AOM) - TRUNC(FUN_GIORNI_PIU(T_INIZIALE,2))) > 0;
-- CALCOLO FLAG PENALE ALTRO AOM SLA Y DONOR
UPDATE DWH.MNP_DW_SLA_TC_OUT
SET IS_PENALE_ALTRO_AOM = 'Y'
WHERE TIPO_MESSAGGIO='SLA Y' AND IS_PENALE_ALTRO_AOM IS NULL AND PROCESSO = 'D' AND MESE_COMP_FINALE = mesecomp
AND TRUNC( TRUNC(T_FINALE_ALTRO_AOM) - TRUNC(FUN_GIORNI_PIU(T_INIZIALE,5))) > 0;
-- CALCOLO FLAG PENALE ALTRO AOM SLA Z DONOR
UPDATE DWH.MNP_DW_SLA_TC_OUT
SET IS_PENALE_ALTRO_AOM = 'Y'
WHERE TIPO_MESSAGGIO='SLA Z' AND IS_PENALE_ALTRO_AOM IS NULL AND PROCESSO = 'D' AND MESE_COMP_FINALE = mesecomp
AND TRUNC( TRUNC(T_FINALE_ALTRO_AOM) - TRUNC(FUN_GIORNI_PIU(T_INIZIALE,5))) > 0;
-- CALCOLO FLAG PENALE ALTRO AOM SLA X RECIPIENT
-- LA WHERE CONDITION IS_PENALE_ALTRO_AOM IS NULL FA SI CHE CONSIDERI SOLO I DATI APPENA INSERITI
UPDATE DWH.MNP_DW_SLA_TC_OUT
SET IS_PENALE_ALTRO_AOM = 'Y'
WHERE TIPO_MESSAGGIO='SLA X' AND PROCESSO = 'R' AND MESE_COMP_FINALE = mesecomp
AND TRUNC( TRUNC(T_FINALE_ALTRO_AOM) - TRUNC(FUN_GIORNI_PIU(T_INIZIALE,2))) > 0;
-- CALCOLO FLAG PENALE ALTRO AOM SLA Y RECIPIENT
UPDATE DWH.MNP_DW_SLA_TC_OUT
SET IS_PENALE_ALTRO_AOM = 'Y'
WHERE TIPO_MESSAGGIO='SLA Y' AND PROCESSO = 'R' AND MESE_COMP_FINALE = mesecomp
AND TRUNC( TRUNC(T_FINALE_ALTRO_AOM) - TRUNC(FUN_GIORNI_PIU(T_INIZIALE,5))) > 0;
-- CALCOLO FLAG PENALE ALTRO AOM SLA Z RECIPIENT
UPDATE DWH.MNP_DW_SLA_TC_OUT
SET IS_PENALE_ALTRO_AOM = 'Y'
WHERE TIPO_MESSAGGIO='SLA Z' AND PROCESSO = 'R' AND MESE_COMP_FINALE = mesecomp
AND TRUNC( TRUNC(T_FINALE_ALTRO_AOM) - TRUNC(FUN_GIORNI_PIU(T_INIZIALE,5))) > 0;
-- ######################################### --
-- ######################################### --
-- se i giorni di ritardo sono < 0 (non c'e' ritardo)
-- cancello i record corrispondenti
DELETE FROM dwh.mnp_dw_sla_tc_out
WHERE numero_giorni_ritardo <= 0
and is_penale_altro_aom IS NULL;
DELETE FROM dwh.mnp_dw_sla_tc_out
WHERE numero_giorni_ritardo is null and is_penale_altro_aom IS NULL;
-- INFINE CALCOLO LA PENALE DI 10 EURO AL GIORNO
UPDATE dwh.mnp_dw_sla_tc_out
SET penale = numero_giorni_ritardo * F_ESTRAI_IMPORTO_SLA(decode(processo,'D',donor_effettivo,'R',recipient_effettivo,
'V',decode(donor_effettivo,'TIMG',donor_effettivo,recipient_effettivo)),TIPO_MESSAGGIO)
WHERE numero_giorni_ritardo > 0
AND penale IS NULL;
COMMIT;
DBMS_OUTPUT.put_line ('Calcolo penali completato con successo');
EXCEPTION
WHEN OTHERS THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in CALCOLO_SLA_TC ' || SQLERRM);
RETURN;
END CALCOLO_SLA_TC;
/

View File

@@ -0,0 +1,180 @@
create or replace procedure CARICAMENTO_REPORT_TCR(P_DATA DATE) is
begin
-- cancellazione del pregresso
BEGIN
DELETE MNP_DW_REPORT_TCR
WHERE data_di_riferimento < ADD_MONTHS(sysdate,-13);
--
COMMIT;
DBMS_OUTPUT.put_line('CANCELLAZIONE DEL PREGRESSO (DATI PIU'' VECCHI DI 13 MESI) '||TO_CHAR(SYSDATE,'DD/MM/YYYY'));
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.put_line('ERRORE IN CANCELLAZIONE DEL PREGRESSO '|| SQLERRM
|| ' '|| TO_CHAR(SYSDATE,'DD/MM/YYYY'));
END;
BEGIN
DBMS_OUTPUT.put_line('INIZIO CARICAMENTO TCR AMBITO RECIPIENT '||TO_CHAR(SYSDATE,'DD/MM/YYYY'));
-- CARICAMENTO DATI AMBITO RECIPIENT
INSERT INTO MNP_DW_REPORT_TCR (id_richiesta, blocco, data_di_riferimento, data_dco_eff, tcr1, tcr2,
msisdn, codice_pre_post_pagato, codice_operatore_don_eff, codice_operatore_rec_eff)
SELECT R.ID_RICHIESTA, 0 BLOCCO, SRTC.DATA_NOTIFICA_RECIPIENT, R.DATA_CUT_OVER_EFF,RTC.CREDITO, RTC.CREDITO,
R.MSISDN, R.CODICE_PRE_POST_PAGATO, R.CODICE_OPERATORE_DON_EFF, R.CODICE_OPERATORE_REC_EFF
FROM MNP.MNP_GESTIONE_RICHIESTA_REC R, MNP.MNP_GEST_RICH_REC_TC RTC, MNP.MNP_STOR_RICH_REC_TC SRTC
WHERE R.ID_RICHIESTA = RTC.ID_RICHIESTA
AND RTC.ID_RICHIESTA = SRTC.ID_RICHIESTA
AND R.CODICE_OPERATORE_REC_EFF = 'TIMG'
AND SRTC.STATO_DA = -1 --PASSAGGIO DI STATO DELLE RICHIESTE SENZA BLOCCO
AND SRTC.STATO_A = 7 --
AND SRTC.DATA_LAVORAZIONE = TRUNC(P_DATA)
UNION
SELECT R.ID_RICHIESTA, 1 BLOCCO, SRTC.DATA_NOTIFICA_RECIPIENT, R.DATA_CUT_OVER_EFF, RTC.CREDITO, RTC.CREDITO,
R.MSISDN, R.CODICE_PRE_POST_PAGATO, R.CODICE_OPERATORE_DON_EFF, R.CODICE_OPERATORE_REC_EFF
FROM MNP.MNP_GESTIONE_RICHIESTA_REC R, MNP.MNP_GEST_RICH_REC_TC RTC, MNP.MNP_STOR_RICH_REC_TC SRTC
WHERE R.ID_RICHIESTA = RTC.ID_RICHIESTA
AND RTC.ID_RICHIESTA = SRTC.ID_RICHIESTA
AND R.CODICE_OPERATORE_REC_EFF = 'TIMG'
AND SRTC.STATO_DA = 2 -- PASSAGGIO DI STATO DELLE RICHIESTE CON BLOCCO IMPORTO
AND SRTC.STATO_A = 7 --
AND SRTC.DATA_LAVORAZIONE = TRUNC(P_DATA)
UNION
SELECT R.ID_RICHIESTA, 2 BLOCCO, SRTC.DATA_NOTIFICA_RECIPIENT, R.DATA_CUT_OVER_EFF, RTC.CREDITO, RTC.CREDITO,
R.MSISDN, R.CODICE_PRE_POST_PAGATO, R.CODICE_OPERATORE_DON_EFF, R.CODICE_OPERATORE_REC_EFF
FROM MNP.MNP_GESTIONE_RICHIESTA_REC R, MNP.MNP_GEST_RICH_REC_TC RTC, MNP.MNP_STOR_RICH_REC_TC SRTC
WHERE R.ID_RICHIESTA = RTC.ID_RICHIESTA
AND RTC.ID_RICHIESTA = SRTC.ID_RICHIESTA
AND R.CODICE_OPERATORE_REC_EFF = 'TIMG'
AND SRTC.STATO_DA = 3 -- PASSAGGIO DI STATO DELLE RICHIESTE CON VERIFICA CREDITO ANOMALO
AND SRTC.STATO_A = 7 --
AND SRTC.DATA_LAVORAZIONE = TRUNC(P_DATA);
--
--
COMMIT;
--
DBMS_OUTPUT.put_line('FINE CARICAMENTO TCR AMBITO RECIPIENT '||TO_CHAR(SYSDATE,'DD/MM/YYYY'));
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.put_line('ERRORE CARICAMENTO TCR AMBITO RECIPIENT '|| SQLERRM
|| ' '|| TO_CHAR(SYSDATE,'DD/MM/YYYY'));
END;
BEGIN
-- CARICAMENTO DATI AMBITO DONOR
DBMS_OUTPUT.put_line('INIZIO CARICAMENTO TCR AMBITO DONOR '||TO_CHAR(SYSDATE,'DD/MM/YYYY'));
--
INSERT INTO MNP_DW_REPORT_TCR (id_richiesta, blocco, data_di_riferimento, data_dco_eff, tcr1, tcr2,
msisdn, codice_pre_post_pagato, codice_operatore_don_eff, codice_operatore_rec_eff)
SELECT D.ID_RICHIESTA, 0 BLOCCO, SDTC.DATA_NOTIFICA_RECIPIENT, D.DATA_CUT_OVER_EFF, DTC.CREDITO, DTC.CREDITO,
D.MSISDN, D.CODICE_PRE_POST_PAGATO, D.CODICE_OPERATORE_DON_EFF, D.CODICE_OPERATORE_REC_EFF
FROM MNP.MNP_GESTIONE_RICHIESTA D, MNP.MNP_GEST_RICH_DON_TC DTC, MNP.MNP_STOR_RICH_DON_TC SDTC
WHERE D.ID_RICHIESTA = DTC.ID_RICHIESTA
AND DTC.ID_RICHIESTA = SDTC.ID_RICHIESTA
AND D.CODICE_OPERATORE_DON_EFF = 'TIMG'
AND SDTC.STATO_DA = 1 -- PASSAGGIO DI STATO DELLE RICHIESTE SENZA BLOCCO
AND SDTC.STATO_A = 7 --
AND SDTC.DATA_LAVORAZIONE = TRUNC(P_DATA)
UNION
SELECT D.ID_RICHIESTA, 1 BLOCCO, SDTC.DATA_NOTIFICA_RECIPIENT, D.DATA_CUT_OVER_EFF, DTC.CREDITO, DTC.CREDITO,
D.MSISDN, D.CODICE_PRE_POST_PAGATO, D.CODICE_OPERATORE_DON_EFF, D.CODICE_OPERATORE_REC_EFF
FROM MNP.MNP_GESTIONE_RICHIESTA D, MNP.MNP_GEST_RICH_DON_TC DTC, MNP.MNP_STOR_RICH_DON_TC SDTC
WHERE D.ID_RICHIESTA = DTC.ID_RICHIESTA
AND DTC.ID_RICHIESTA = SDTC.ID_RICHIESTA
AND D.CODICE_OPERATORE_DON_EFF = 'TIMG'
AND SDTC.STATO_DA = 4 -- PASSAGGIO DI STATO DELLE RICHIESTE CON BLOCCO IMPORTO
AND SDTC.STATO_A = 7 --
AND SDTC.DATA_LAVORAZIONE = TRUNC(P_DATA);
--
COMMIT;
--
DBMS_OUTPUT.put_line('FINE CARICAMENTO TCR AMBITO DONOR '||TO_CHAR(SYSDATE,'DD/MM/YYYY'));
--
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.put_line('ERRORE CARICAMENTO TCR AMBITO DONOR '|| SQLERRM
|| ' '|| TO_CHAR(SYSDATE,'DD/MM/YYYY'));
END;
--
--
BEGIN
DBMS_OUTPUT.put_line('INIZIO CARICAMENTO TCR AMBITO RECIPIENT VIRTULAE '||TO_CHAR(SYSDATE,'DD/MM/YYYY'));
-- CARICAMENTO DATI AMBITO RECIPIENT VIRTULAE
INSERT INTO MNP_DW_REPORT_TCR (id_richiesta, blocco, data_di_riferimento, data_dco_eff, tcr1, tcr2,
msisdn, codice_pre_post_pagato, codice_operatore_don_eff, codice_operatore_rec_eff)
SELECT RV.ID_RICHIESTA, 0 BLOCCO, SRVTC.DATA_NOTIFICA_RECIPIENT, RV.DATA_CUT_OVER_EFF,RVTC.CREDITO, RVTC.CREDITO,
RV.MSISDN, RV.CODICE_PRE_POST_PAGATO, RV.CODICE_OPERATORE_DONATING, RV.CODICE_OPERATORE_RECIPIENT
FROM MNP.MNP_GEST_RICH_REC_VIRT RV, MNP.MNP_GEST_RICH_REC_VIRT_TC RVTC, MNP.MNP_STOR_RICH_REC_VIRT_TC SRVTC
WHERE RV.ID_RICHIESTA = RVTC.ID_RICHIESTA
AND RVTC.ID_RICHIESTA = SRVTC.ID_RICHIESTA
AND SRVTC.STATO_DA = 1 --PASSAGGIO DI STATO DELLE RICHIESTE SENZA BLOCCO
AND SRVTC.STATO_A = 7 --
AND SRVTC.DATA_LAVORAZIONE = TRUNC(P_DATA)
UNION
SELECT RV.ID_RICHIESTA, 1 BLOCCO, SRVTC.DATA_NOTIFICA_RECIPIENT, RV.DATA_CUT_OVER_EFF, RVTC.CREDITO, RVTC.CREDITO,
RV.MSISDN, RV.CODICE_PRE_POST_PAGATO, RV.CODICE_OPERATORE_DONATING, RV.CODICE_OPERATORE_RECIPIENT
FROM MNP.MNP_GEST_RICH_REC_VIRT RV, MNP.MNP_GEST_RICH_REC_VIRT_TC RVTC, MNP.MNP_STOR_RICH_REC_VIRT_TC SRVTC
WHERE RV.ID_RICHIESTA = RVTC.ID_RICHIESTA
AND RVTC.ID_RICHIESTA = SRVTC.ID_RICHIESTA
AND SRVTC.STATO_DA = 4 -- PASSAGGIO DI STATO DELLE RICHIESTE CON BLOCCO IMPORTO
AND SRVTC.STATO_A = 7 --
AND SRVTC.DATA_LAVORAZIONE = TRUNC(P_DATA);
--
--
COMMIT;
--
DBMS_OUTPUT.put_line('FINE CARICAMENTO TCR AMBITO RECIPIENT VIRTULAE '||TO_CHAR(SYSDATE,'DD/MM/YYYY'));
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.put_line('ERRORE CARICAMENTO TCR AMBITO RECIPIENT VIRTULAE '|| SQLERRM
|| ' '|| TO_CHAR(SYSDATE,'DD/MM/YYYY'));
END;
BEGIN
-- CARICAMENTO DATI AMBITO DONOR VIRTUALE
DBMS_OUTPUT.put_line('INIZIO CARICAMENTO TCR AMBITO DONOR VIRTUALE '||TO_CHAR(SYSDATE,'DD/MM/YYYY'));
--
INSERT INTO MNP_DW_REPORT_TCR (id_richiesta, blocco, data_di_riferimento, data_dco_eff, tcr1, tcr2,
msisdn, codice_pre_post_pagato, codice_operatore_don_eff, codice_operatore_rec_eff)
SELECT DV.ID_RICHIESTA, 0 BLOCCO, SDVTC.DATA_NOTIFICA_RECIPIENT, DV.DATA_CUT_OVER_EFF, DVTC.CREDITO, DVTC.CREDITO,
DV.MSISDN, DV.CODICE_PRE_POST_PAGATO, DV.CODICE_OPERATORE_DONATING, DV.CODICE_OPERATORE_RECIPIENT
FROM MNP.MNP_GEST_RICH_DONOR_VIRT DV, MNP.MNP_GEST_RICH_DON_VIRT_TC DVTC, MNP.MNP_STOR_RICH_DON_VIRT_TC SDVTC
WHERE DV.ID_RICHIESTA = DVTC.ID_RICHIESTA
AND DVTC.ID_RICHIESTA = SDVTC.ID_RICHIESTA
AND SDVTC.STATO_DA = 6 -- PASSAGGIO DI STATO DELLE RICHIESTE SENZA BLOCCO
AND SDVTC.STATO_A = 7 --
AND SDVTC.DATA_LAVORAZIONE = TRUNC(P_DATA)
UNION
SELECT DV.ID_RICHIESTA, 1 BLOCCO, SDVTC.DATA_NOTIFICA_RECIPIENT, DV.DATA_CUT_OVER_EFF, DVTC.CREDITO, DVTC.CREDITO,
DV.MSISDN, DV.CODICE_PRE_POST_PAGATO, DV.CODICE_OPERATORE_DONATING, DV.CODICE_OPERATORE_RECIPIENT
FROM MNP.MNP_GEST_RICH_DONOR_VIRT DV, MNP.MNP_GEST_RICH_DON_VIRT_TC DVTC, MNP.MNP_STOR_RICH_DON_VIRT_TC SDVTC
WHERE DV.ID_RICHIESTA = DVTC.ID_RICHIESTA
AND DVTC.ID_RICHIESTA = SDVTC.ID_RICHIESTA
AND SDVTC.STATO_DA = 2 -- PASSAGGIO DI STATO DELLE RICHIESTE CON BLOCCO IMPORTO
AND SDVTC.STATO_A = 6 --
AND SDVTC.DATA_LAVORAZIONE = TRUNC(P_DATA)
UNION
SELECT DV.ID_RICHIESTA, 2 BLOCCO, SDVTC.DATA_NOTIFICA_RECIPIENT, DV.DATA_CUT_OVER_EFF, DVTC.CREDITO, DVTC.CREDITO,
DV.MSISDN, DV.CODICE_PRE_POST_PAGATO, DV.CODICE_OPERATORE_DONATING, DV.CODICE_OPERATORE_RECIPIENT
FROM MNP.MNP_GEST_RICH_DONOR_VIRT DV, MNP.MNP_GEST_RICH_DON_VIRT_TC DVTC, MNP.MNP_STOR_RICH_DON_VIRT_TC SDVTC
WHERE DV.ID_RICHIESTA = DVTC.ID_RICHIESTA
AND DVTC.ID_RICHIESTA = SDVTC.ID_RICHIESTA
AND SDVTC.STATO_DA = 3 -- PASSAGGIO DI STATO DELLE RICHIESTE CON VERIFICA CREDITO ANOMALO
AND SDVTC.STATO_A = 6 --
AND SDVTC.DATA_LAVORAZIONE = TRUNC(P_DATA);
--
COMMIT;
--
DBMS_OUTPUT.put_line('FINE CARICAMENTO TCR AMBITO DONOR VIRTUALE '||TO_CHAR(SYSDATE,'DD/MM/YYYY'));
--
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.put_line('ERRORE CARICAMENTO TCR AMBITO DONOR VIRTUALE '|| SQLERRM
|| ' '|| TO_CHAR(SYSDATE,'DD/MM/YYYY'));
END;
--
DBMS_OUTPUT.put_line('CARICAMENTO REPORT TCR TERMINATO '||TO_CHAR(SYSDATE,'DD/MM/YYYY'));
--
end CARICAMENTO_REPORT_TCR;
/

View File

@@ -0,0 +1,69 @@
CREATE OR REPLACE PROCEDURE "CARICAMENTO_SLA_TC" (
mese_in IN NUMBER,
anno_in IN NUMBER,
cod_errore OUT NUMBER
)
IS
-- Purpose: Caricamento della tabella temporanea
-- necessarie al calcolo degli SLA X, Y e Z sui trasferimenti credito
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- Alessandro De Simone 26/10/2009 Creazione
-- Luca Alghisi K12-2012: commentate le chiamate alle procedura TCR ESP per rendere valida la procedura di lancio
-------------------------------------------------------
errore_don NUMBER;
errore_rec NUMBER;
errore_dv_mvno NUMBER;
errore_dv_esp NUMBER;
errore_rv_mvno NUMBER;
errore_rv_esp NUMBER;
errore_m2m NUMBER;
errore NUMBER;
BEGIN
cod_errore := 0;
-- caricamento notifiche DONOR
DBMS_OUTPUT.put_line ('Sto eseguendo caricamento_sla_tc_don');
dwh.caricamento_sla_tc_don (mese_in,anno_in, errore_don);
-- caricamento notifiche RECIPIENT
DBMS_OUTPUT.put_line ('Sto eseguendo caricamento_sla_tc_rec');
dwh.caricamento_sla_tc_rec (mese_in,anno_in, errore_rec);
-- caricamento notifiche processi VIRTUALI
DBMS_OUTPUT.put_line ('Sto eseguendo caricamento_sla_tc_dv_mvno');
dwh.caricamento_sla_tc_dv_mvno (mese_in,anno_in, errore_dv_mvno);
/*DBMS_OUTPUT.put_line ('Sto eseguendo caricamento_sla_tc_dv_esp'); Commentata la procedura per il calcolo delle penali TCR per le richieste ESP non piu' presenti
dwh.caricamento_sla_tc_dv_esp (mese_in,anno_in, errore_dv_esp);*/
DBMS_OUTPUT.put_line ('Sto eseguendo caricamento_sla_tc_rv_mvno');
dwh.caricamento_sla_tc_rv_mvno (mese_in,anno_in, errore_rv_mvno);
/*DBMS_OUTPUT.put_line ('Sto eseguendo caricamento_sla_tc_rv_esp'); Commentata la procedura per il calcolo delle penali TCR per le richieste ESP non piu' presenti
dwh.caricamento_sla_tc_rv_esp (mese_in,anno_in, errore_rv_esp);*/
DBMS_OUTPUT.put_line ('Sto eseguendo caricamento_sla_tc_mvno2mvno');
dwh.caricamento_sla_tc_mvno2mvno (mese_in,anno_in, errore_m2m);
errore := errore_don + errore_rec + errore_dv_mvno + errore_rv_mvno + errore_m2m;
-- errore_dv_esp + errore_rv_esp
IF errore = 0
THEN
-- tutto a posto
DBMS_OUTPUT.put_line ('Caricamento completato con successo');
ELSE
-- problema nel caricamento di almeno una tipologia di notifiche
DBMS_OUTPUT.put_line ('Errore nel caricamento delle notifiche');
cod_errore := 1;
END IF;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore CARICAMENTO_SLA_TC ' || SQLERRM);
RETURN;
END;
/

View File

@@ -0,0 +1,313 @@
CREATE OR REPLACE PROCEDURE DWH.CARICAMENTO_SLA_TC_DON (
mese_in IN NUMBER,
anno_in IN NUMBER,
cod_errore OUT NUMBER
)
AS
-- Purpose: Caricamento della tabella MNP_DW_SLA_TC_OUT
-- relativamente al processo DONOR
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- Alessandro De Simone 27/10/2009 Creazione script
-- Luca Alghisi K12-2012: introduzione dell'estrazione delle finestre temporali dalla tabella di configurazione
---------------------------------------
data_iniziale DATE;
data_finale DATE;
V_TFINALE_ESPL mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
V_TFINALE_ACK_ESPL mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
V_TFINALE_TRASF mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
V_TFINALE_ACK_TRASF mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
V_TFINALE_SBL_CRED_ANOM mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
V_TFINALE_ACK_SBL_CRED_ANOM mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
V_TFINALE_SBL_IMP mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
BEGIN
cod_errore := 0;
-- calcolo le date iniziali e finali di interesse
data_iniziale := TO_DATE ('1-' || mese_in || '-' || anno_in, 'DD-MM-YYYY');
data_finale := ADD_MONTHS (data_iniziale, +1);
-- ESTRAZIONE ORARI DI CHIUSURA DELLA FINESTRE PER GLI SLA X-Y-Z
SELECT REPLACE(T_FINALE,':'), REPLACE(T_FINALE_ACK,':')
INTO V_TFINALE_ESPL, V_TFINALE_ACK_ESPL
FROM MNP.MNP_ANAG_FINESTRE_TEMP_D147
WHERE DESC_FILE = 'ESPLETAMENTO'
AND TIPO_FILE = 6;
--
SELECT REPLACE(T_FINALE,':'), REPLACE(T_FINALE_ACK,':')
INTO V_TFINALE_TRASF, V_TFINALE_ACK_TRASF
FROM MNP.MNP_ANAG_FINESTRE_TEMP_D147
WHERE DESC_FILE = 'TRASFERIMENTOCREDITO'
AND TIPO_FILE = 10;
--
SELECT REPLACE(T_FINALE,':'), REPLACE(T_FINALE_ACK,':')
INTO V_TFINALE_SBL_CRED_ANOM, V_TFINALE_ACK_SBL_CRED_ANOM
FROM MNP.MNP_ANAG_FINESTRE_TEMP_D147
WHERE DESC_FILE = 'SBLOCCOCREDITOANOMALO'
AND TIPO_FILE = 11;
--
SELECT REPLACE(T_FINALE,':')
INTO V_TFINALE_SBL_IMP
FROM MNP.MNP_ANAG_FINESTRE_TEMP_D147
WHERE DESC_FILE = 'SBLOCCOIMPORTO'
AND TIPO_FILE = 12;
-- DBMS_OUTPUT.put_line('Data iniziale = '|| data_iniziale);
-- DBMS_OUTPUT.put_line('Data finale = '|| data_finale);
-- per prima cosa carichiamo le notifiche credito: SLA X
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta
, tipo_messaggio
, data_messaggio
, donor_rete
, recipient_rete
, dco_effettiva
, data_notifica_credito -- coincide con t_finale
, t_iniziale
, t_finale
, processo
, nome_file -- duplicato di nome_file_finale
, nome_file_iniziale
, nome_file_finale
, donor_effettivo -- o donor Ospitato
, recipient_effettivo ---- o recipient Ospitato
, msisdn
, codice_richiesta_recipient
, ack_iniziale
, ack_finale
, data_attesa_evento_fin
, mese_comp_finale,t_finale_altro_aom
)
SELECT UNIQUE gr.id_richiesta
, 'SLA X'
, MIN(trasXml.data_eff)
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.data_cut_over_eff
, MIN (fun_calcola_data (trasXml.nome_file, V_TFINALE_TRASF, trasXml.data_eff)) -- data_notifica_credito
, MAX (fun_calcola_data (nvl(espAckIn.nome_file, espXml.nome_file), DECODE(espAckIn.nome_file, NULL, V_TFINALE_ESPL, V_TFINALE_ACK_ESPL), espXml.data_eff)) -- TI data estratta dell ack inviato al Recipient in risposta all'espletamento del donating
, FUN_CALCOLA_DATA_RIC(to_date(substr( MIN(trasXml.nome_file),5,14),'YYYYMMDDHH24MISS'),V_TFINALE_TRASF) -- TF data estratta dal nome della notifica credito
, 'D'
, MIN(trasXml.nome_file) -- nome file della notifica credito
, MAX(espXml.nome_file) -- nome file dell ack inviato al Recipient in risposta all'espletamento del donating
, MIN(trasXml.nome_file) -- nome_file della notifica credito
, gr.codice_operatore_don_eff
, gr.codice_operatore_rec_eff
, gr.msisdn
, gr.codice_richiesta_recipient
, MAX(espAckIn.nome_file)
, MIN(trasAckIn.nome_file)
, fun_giorni_piu(MIN (fun_calcola_data (nvl(espAckIn.nome_file, espXml.nome_file), DECODE(espAckIn.nome_file, NULL, V_TFINALE_ESPL, V_TFINALE_ACK_ESPL), espXml.data_eff)),2) -- la data_attesa evento finale (TI+2gg))
, TO_CHAR(FUN_CALCOLA_DATA_RIC(to_date(substr( MIN(trasXml.nome_file),5,14),'YYYYMMDDHH24MISS'),V_TFINALE_TRASF), 'MM/YYYY') -- mese competenza
, MIN (fun_calcola_data (trasXml.nome_file, V_TFINALE_TRASF, trasXml.data_eff))
FROM mnp.mnp_xml_ack_in espAckIn
,mnp.mnp_xml_richiesta_out rEsp
,mnp.mnp_xml_out espXml
,mnp.mnp_xml_out trasXml
,mnp.mnp_xml_richiesta_out rTras
,mnp.mnp_xml_ack_in trasAckIn
,mnp.mnp_gestione_richiesta gr
WHERE trasXml.tipo_processo = 'D'
AND espXml.destinatario <> 'NPTS'
AND trasXml.tipo_file = '10'
AND espXml.tipo_processo = 'D'
AND espXml.tipo_file= '6'
AND espAckIn.nome_file_riferito(+) = rEsp.nome_file
AND rEsp.nome_file = espXml.nome_file
AND rEsp.id_richiesta = gr.id_richiesta
AND gr.id_richiesta = rTras.id_richiesta
AND rTras.nome_file = trasXml.nome_file
AND trasAckIn.nome_file_riferito = rTras.nome_file
AND trasAckIn.RISULTATO = 'OK'
AND espAckIn.RISULTATO(+) = 'OK'
AND trasXml.data_eff >= data_iniziale
AND trasXml.data_eff < data_finale
GROUP BY gr.id_richiesta
,gr.codice_operatore_don_eff
,gr.codice_operatore_rec_eff
,gr.codice_operatore_donating
,gr.codice_operatore_recipient
,gr.data_cut_over_eff
,gr.msisdn
,gr.codice_richiesta_recipient;
-- CARICHIAMO le notifiche di sblocco credito anomalo SLAY
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta
, tipo_messaggio
, data_messaggio
, donor_rete
, recipient_rete
, dco_effettiva
, data_notifica_credito
, data_sbl_credito_anomalo
, t_iniziale
, t_finale
, processo
, nome_file -- DUPLICATO DI NOME_FILE_FINALE
, nome_file_iniziale
, nome_file_finale
, donor_effettivo -- o donor Ospitato
, recipient_effettivo ---- o recipient Ospitato
, msisdn
, codice_richiesta_recipient
, ack_iniziale
, ack_finale
, data_attesa_evento_fin
, mese_comp_finale,t_finale_altro_aom
)
SELECT UNIQUE gr.id_richiesta
, 'SLA Y'
, MIN(sblCrXml.data_eff)
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.data_cut_over_eff
, MIN (fun_calcola_data (trasXml.nome_file, V_TFINALE_TRASF, trasXml.data_eff)) -- data trasferimento credito
, MIN (fun_calcola_data (sblCrXml.nome_file, V_TFINALE_SBL_CRED_ANOM, sblCrXml.data_eff)) -- data_sbl_credito_anomalo
, MIN (fun_calcola_data (nvl(trasAckIn.nome_file, trasXml.nome_file), DECODE(trasAckIn.nome_file, NULL, V_TFINALE_TRASF, V_TFINALE_ACK_TRASF), trasXml.data_eff)) -- TI data estratta dall'ack ricevuto dal Recipient in risposta al trasferimento credito del donating
, FUN_CALCOLA_DATA_RIC(to_date(substr( MIN(sblCrXml.nome_file),5,14),'YYYYMMDDHH24MISS'),V_TFINALE_SBL_CRED_ANOM) -- TF data estratta dal nome sblocco credito anomalo out
, 'D'
, MIN(sblCrXml.nome_file) -- nome file della notifica credito
, MIN(trasXml.nome_file) -- nome file dell ack inviato al Recipient in risposta alla notifica di cretito
, MIN(sblCrXml.nome_file) -- nome_file del sblocco importo
, gr.codice_operatore_don_eff
, gr.codice_operatore_rec_eff
, gr.msisdn
, gr.codice_richiesta_recipient
, MIN(trasAckIn.nome_file)
, MIN(sblCrAckIn.nome_file)
, fun_giorni_piu(MIN (fun_calcola_data (nvl(trasAckIn.nome_file, trasXml.nome_file), DECODE(trasAckIn.nome_file, NULL, V_TFINALE_TRASF, V_TFINALE_ACK_TRASF), trasXml.data_eff)),5) -- data attesa evento finale
, TO_CHAR(FUN_CALCOLA_DATA_RIC(to_date(substr( MIN(sblCrXml.nome_file),5,14),'YYYYMMDDHH24MISS'),V_TFINALE_SBL_CRED_ANOM) , 'MM/YYYY') -- mese competenza
, MIN (fun_calcola_data (sblCrXml.nome_file, V_TFINALE_SBL_CRED_ANOM, sblCrXml.data_eff))
FROM mnp.mnp_xml_ack_in trasAckIn
,mnp.mnp_xml_richiesta_out rTras
,mnp.mnp_xml_out trasXml
,mnp.mnp_xml_out sblCrXml
,mnp.mnp_xml_richiesta_out rSblCr
,mnp.mnp_xml_ack_in sblCrAckIn
,mnp.mnp_gestione_richiesta gr
WHERE trasXml.tipo_processo = 'D'
AND trasXml.tipo_file = '10'
AND sblCrXml.tipo_processo = 'D'
AND sblCrXml.tipo_file= '11'
AND trasAckIn.nome_file_riferito(+) = rTras.nome_file
AND rTras.nome_file = trasXml.nome_file
AND rTras.id_richiesta = gr.id_richiesta
AND gr.id_richiesta = rSblCr.id_richiesta
AND rSblCr.nome_file = sblCrXml.nome_file
AND sblCrAckIn.nome_file_riferito = sblCrXml.nome_file
AND sblCrAckIn.risultato = 'OK'
AND trasAckIn.risultato(+) = 'OK'
AND sblCrXml.data_eff >= data_iniziale
AND sblCrXml.data_eff < data_finale
GROUP BY gr.id_richiesta
,gr.codice_operatore_don_eff
,gr.codice_operatore_rec_eff
,gr.data_cut_over_eff
,gr.codice_operatore_donating
,gr.codice_operatore_recipient
,gr.msisdn
,gr.codice_richiesta_recipient
;
-- ora carico le notifiche di sblocco importo ---SLA Z
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta
, tipo_messaggio
, data_messaggio
, donor_rete
, recipient_rete
, dco_effettiva
, data_notifica_credito
, data_sbl_importo
, t_iniziale
, t_finale
, processo
, nome_file -- duplicato di nome_file_finale
, nome_file_iniziale
, nome_file_finale
, donor_effettivo -- o donor Ospitato
, recipient_effettivo ---- o recipient Ospitato
, msisdn
, codice_richiesta_recipient
, ack_iniziale
, ack_finale
, data_attesa_evento_fin
, mese_comp_finale,t_finale_altro_aom
)
SELECT UNIQUE gr.id_richiesta
, 'SLA Z'
, MIN(sblImXml.data_eff)
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.data_cut_over_eff
, MIN (fun_calcola_data (trasXml.nome_file, V_TFINALE_TRASF, trasXml.data_eff)) -- data trasferimento credito
, MIN (fun_calcola_data (sblImXml.nome_file, V_TFINALE_SBL_IMP, sblImXml.data_eff)) -- data sblocco importo
, MIN (fun_calcola_data (NVL(trasAckIn.nome_file, trasXml.nome_file), DECODE(trasAckIn.nome_file, NULL, V_TFINALE_TRASF, V_TFINALE_ACK_TRASF), trasXml.data_eff)) -- TI data estratta dall'ack ricevuto dal Recipient in risposta al trasferimento credito del donating
, FUN_CALCOLA_DATA_RIC(to_date(substr(MIN(sblImXml.nome_file),5,14),'YYYYMMDDHH24MISS'),V_TFINALE_SBL_IMP) -- data estratta dal nome sblocco importo
, 'D'
, MIN(sblImXml.nome_file) -- nome file della notifica credito
, MIN(trasXml.nome_file) -- nome file dell ack inviato al Recipient in risposta alla notifica credito
, MIN(sblImXml.nome_file) -- nome_file del sblocco Importo
, gr.codice_operatore_don_eff
, gr.codice_operatore_rec_eff
, gr.msisdn
, gr.codice_richiesta_recipient
, MIN(trasAckIn.nome_file)
, MIN(sblImAckIn.nome_file)
, fun_giorni_piu(MIN (fun_calcola_data (NVL(trasAckIn.nome_file, trasXml.nome_file), DECODE(trasAckIn.nome_file, NULL, V_TFINALE_TRASF, V_TFINALE_ACK_TRASF), trasXml.data_eff)),5) -- data attesa evento finale
, TO_CHAR(FUN_CALCOLA_DATA_RIC(to_date(substr(MIN(sblImXml.nome_file),5,14),'YYYYMMDDHH24MISS'),V_TFINALE_SBL_IMP), 'MM/YYYY') -- mese competenza
, MIN (fun_calcola_data (sblImXml.nome_file, V_TFINALE_SBL_IMP, sblImXml.data_eff))
FROM mnp.mnp_xml_ack_in trasAckIn
,mnp.mnp_xml_richiesta_out rTras
,mnp.mnp_xml_out trasXml
,mnp.mnp_xml_out sblImXml
,mnp.mnp_xml_richiesta_out rSblIm
,mnp.mnp_xml_ack_in sblImAckIn
,mnp.mnp_gestione_richiesta gr
WHERE trasXml.tipo_processo = 'D'
AND trasXml.tipo_file = '10'
AND sblImXml.tipo_processo = 'D'
AND sblImXml.tipo_file= '12'
AND trasAckIn.nome_file_riferito(+) = rTras.nome_file
AND rTras.nome_file = trasXml.nome_file
AND rTras.id_richiesta = gr.id_richiesta
AND gr.id_richiesta = rSblIm.id_richiesta
AND rSblIm.nome_file = sblImXml.nome_file
AND sblImAckIn.nome_file_riferito = sblImXml.nome_file
AND trasAckIn.RISULTATO(+) = 'OK'
AND sblImAckIn.RISULTATO = 'OK'
AND sblImXml.data_eff >= data_iniziale
AND sblImXml.data_eff < data_finale
GROUP BY gr.id_richiesta
,gr.codice_operatore_don_eff
,gr.codice_operatore_rec_eff
,gr.data_cut_over_eff
,gr.codice_operatore_donating
,gr.codice_operatore_recipient
,gr.msisdn
,gr.codice_richiesta_recipient
;
-- per le notifiche SI e SCA devo caricare la data della notifica relativa
/*UPDATE dwh.mnp_dw_sla_tc_out tcout
SET tcout.data_notifica_credito = (SELECT fun_calcola_data (nc.nome_file, nc.data_eff)
FROM mnp.mnp_xml_richiesta_out nc, mnp.mnp_xml_out ncxml
WHERE nc.id_richiesta = tcout.id_richiesta
AND NCXML.NOME_FILE=NC.NOME_FILE
AND NCXML.TIPO_FILE='10'
AND ROWNUM = 1)
WHERE tcout.data_notifica_credito IS NULL AND tcout.tipo_messaggio != 'SLA X';*/
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA_TC_DON ' || SQLERRM);
RETURN;
END caricamento_sla_tc_don;
/

View File

@@ -0,0 +1,183 @@
CREATE OR REPLACE PROCEDURE "DWH"."CARICAMENTO_SLA_TC_DV_ESP"
( mese_in IN NUMBER
, anno_in IN NUMBER
, cod_errore OUT NUMBER
) AS
-- Purpose: Caricamento della tabella MNP_DW_SLA_TC_OUT
-- relativamente al processo Donor Virtuale ESP
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- Alessandro De Simone 27/10/2009 Creazione script
---------------------------------------
data_iniziale DATE;
data_finale DATE;
BEGIN
cod_errore := 0;
-- calcolo le date iniziali e finali di interesse
data_iniziale := to_date('1-'|| mese_in||'-'|| anno_in,'DD-MM-YYYY');
data_finale := add_months(data_iniziale,+1);
-- DBMS_OUTPUT.put_line('Data iniziale = '|| data_iniziale);
-- DBMS_OUTPUT.put_line('Data finale = '|| data_finale);
-- per prima cosa carichiamo le notifiche credito
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta
, tipo_messaggio
, data_messaggio
, donor_rete
, recipient_rete
, dco_effettiva
, data_notifica_credito
, t_iniziale
, t_finale
, processo
, nome_file
, nome_file_iniziale
, nome_file_finale
, donor_effettivo
, recipient_effettivo
, msisdn
, codice_richiesta_recipient
, ack_iniziale
, ack_finale
, data_attesa_evento_fin
, mese_comp_finale
)
SELECT UNIQUE gr.id_richiesta
, 'SLA X'
, MIN(tcin.data_ricezione)
, 'TIMG'
, 'TIMG'
, gr.data_cut_over_eff
, MIN (tcin.data_ricezione)
, MIN (gr.data_cut_over_eff) --tempo iniziale, data di validazione del porting
, FUN_CALCOLA_DATA_RIC( MIN (tcin.data_ricezione),1) -- tempo finale, data di notifica credito
, 'V'
, NULL -- nome file non disponibile
, NULL -- nome file non disponibile
, NULL -- nome file non disponibile
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.msisdn
, gr.id_richiesta
, NULL -- nome file non disponibile
, NULL -- nome file non disponibile
, fun_giorni_piu(MIN (gr.data_cut_over_eff),2)--MIN(grVal.data_i_o)
, TO_CHAR(FUN_CALCOLA_DATA_RIC(MIN(tcin.data_ricezione),1),'MM/YYYY')
FROM mnp.mnp_mspcoop_tc_in@MNP tcin
,mnp.mnp_gest_rich_donor_virt@MNP gr
-- ,mnp.mnp_storico_rich_don_virt@MNP grVal
WHERE tcin.id_richiesta_dbc = gr.id_richiesta
-- AND grVal.id_richiesta = gr.id_richiesta
AND SUBSTR(tcin.id_richiesta_dbc,0,2)='DV'
AND tcin.tipo_evento = '01'
-- AND grVal.stato_a in (6,7)
AND tcin.data_ricezione >= data_iniziale
AND tcin.data_ricezione < data_finale
GROUP BY gr.id_richiesta
,gr.data_cut_over_eff
,gr.codice_operatore_donating
,gr.codice_operatore_recipient
,gr.msisdn
;
-- ora carico le notifiche di sblocco importo
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta
, tipo_messaggio
, data_messaggio
, donor_rete
, recipient_rete
, dco_effettiva
, data_notifica_credito
, data_sbl_importo
, t_iniziale
, t_finale
, processo
, nome_file
, nome_file_iniziale
, nome_file_finale
, donor_effettivo
, recipient_effettivo
, msisdn
, codice_richiesta_recipient
, ack_iniziale
, ack_finale
, data_attesa_evento_fin
, mese_comp_finale
)
SELECT UNIQUE gr.id_richiesta
, 'SLA Z'
, MIN(tcinSblIm.data_ricezione)
, 'TIMG'
, 'TIMG'
, gr.data_cut_over_eff
, MIN (tcinNtCr.data_ricezione)
, MIN (tcinSblIm.data_ricezione)
, FUN_CALCOLA_DATA_RIC( MIN (tcinNtCr.data_ricezione),1) --tempo iniziale, data di notifica credito
, FUN_CALCOLA_DATA_RIC( MIN (tcinSblIm.data_ricezione),1) -- tempo finale, data di sblocco importo
, 'V'
, NULL
, NULL
, NULL
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.msisdn
, gr.id_richiesta
, NULL
, NULL
, fun_giorni_piu(MIN (tcinNtCr.data_ricezione),5)--MIN(grVal.data_i_o)
, TO_CHAR(FUN_CALCOLA_DATA_RIC(MIN(tcinSblIm.data_ricezione),1),'MM/YYYY')
FROM mnp.mnp_mspcoop_tc_in@MNP tcinSblIm
,mnp.mnp_mspcoop_tc_in@MNP tcinNtCr
,mnp.mnp_gest_rich_donor_virt@MNP gr
-- ,mnp.mnp_storico_rich_don_virt@MNP grVal
WHERE tcinSblIm.id_richiesta_dbc = gr.id_richiesta
AND tcinNtCr.id_richiesta_dbc =gr.id_richiesta
-- AND grVal.id_richiesta = gr.id_richiesta
AND SUBSTR(tcinNtCr.id_richiesta_dbc,0,2)='DV'
AND tcinNtCr.tipo_evento = '01'
AND SUBSTR(tcinsblIm.id_richiesta_dbc,0,2)='DV'
AND tcinSblIm.tipo_evento = '03'
-- AND grVal.stato_a in (6,7)
AND tcinSblIm.data_ricezione >= data_iniziale
AND tcinSblIm.data_ricezione < data_finale
GROUP BY gr.id_richiesta
,tcinSblIm.data_ricezione
,gr.data_cut_over_eff
,gr.codice_operatore_donating
,gr.codice_operatore_recipient
,gr.msisdn
;
-- per le notifiche SI devo caricare la data della notifica relativa
/* UPDATE dwh.mnp_dw_sla_tc_out tcout SET
tcout.data_notifica_credito = (
SELECT tcin.data_ricezione
FROM mnp.mnp_mspcoop_tc_in@MNP tcin
WHERE tcin.id_richiesta_dbc = tcout.id_richiesta
AND tcin.tipo_evento = '03'
AND rownum = 1
)
WHERE tcout.data_notifica_credito IS NULL
AND tcout.tipo_messaggio != 'SLA X'
AND tcout.data_messaggio >= data_iniziale
AND tcout.data_messaggio < data_finale
;*/
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in CARICAMENTO_SLA_TC_DV_ESP ' || SQLERRM);
RETURN;
END CARICAMENTO_SLA_TC_DV_ESP;
/

View File

@@ -0,0 +1,261 @@
CREATE OR REPLACE PROCEDURE "DWH"."CARICAMENTO_SLA_TC_DV_MVNO"
( mese_in IN NUMBER
, anno_in IN NUMBER
, cod_errore OUT NUMBER
) AS
-- Purpose: Caricamento della tabella MNP_DW_SLA_TC_OUT
-- relativamente al processo Donor Virtuale MVNO
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- Alessandro De Simone 27/10/2009 Creazione script
-- Luca Alghisi K12-2012: introduzione dell'estrazione delle finestre temporali dalla tabella di configurazione
---------------------------------------
data_iniziale DATE;
data_finale DATE;
V_TFINALE_ACK_TRASF mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
V_TFINALE_ACK_SBL_CRED_ANOM mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
V_TFINALE_ACK_SBL_IMP mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
BEGIN
cod_errore := 0;
-- calcolo le date iniziali e finali di interesse
data_iniziale := to_date('1-'|| mese_in||'-'|| anno_in,'DD-MM-YYYY');
data_finale := add_months(data_iniziale,+1);
-- DBMS_OUTPUT.put_line('Data iniziale = '|| data_iniziale);
-- DBMS_OUTPUT.put_line('Data finale = '|| data_finale);
SELECT REPLACE(T_FINALE_ACK,':')
INTO V_TFINALE_ACK_TRASF
FROM MNP.MNP_ANAG_FINESTRE_TEMP_D147
WHERE DESC_FILE = 'TRASFERIMENTOCREDITO'
AND TIPO_FILE = 10;
SELECT REPLACE(T_FINALE_ACK,':')
INTO V_TFINALE_ACK_SBL_CRED_ANOM
FROM MNP.MNP_ANAG_FINESTRE_TEMP_D147
WHERE DESC_FILE = 'SBLOCCOCREDITOANOMALO'
AND TIPO_FILE = 11;
--
SELECT REPLACE(T_FINALE_ACK,':')
INTO V_TFINALE_ACK_SBL_IMP
FROM MNP.MNP_ANAG_FINESTRE_TEMP_D147
WHERE DESC_FILE = 'SBLOCCOIMPORTO'
AND TIPO_FILE = 12;
-- per prima cosa carichiamo le notifiche credito
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta
, tipo_messaggio
, data_messaggio
, donor_rete
, recipient_rete
, dco_effettiva
, data_notifica_credito
, t_iniziale
, t_finale
, processo
, nome_file
, nome_file_iniziale
, nome_file_finale
, donor_effettivo
, recipient_effettivo
, msisdn
, codice_richiesta_recipient
, ack_iniziale
, ack_finale
, data_attesa_evento_fin
, mese_comp_finale
)
SELECT UNIQUE gr.id_richiesta
, 'SLA X'
, MIN(tcin.data_ricezione)
, 'TIMG'
, 'TIMG'
, gr.data_cut_over_eff
, MIN (tcin.data_ricezione)
, MIN (gr.data_cut_over_eff) --tempo iniziale, data di validazione del porting
, FUN_CALCOLA_DATA_RIC( MIN (tcin.data_ricezione),V_TFINALE_ACK_TRASF) -- tempo finale, data di notifica credito
, 'V'
, NULL
, NULL
, NULL
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.msisdn
, gr.id_richiesta
, NULL
, NULL
, fun_giorni_piu(MIN (gr.data_cut_over_eff),2) -- DATA ATTESA EVENTO FINALE
, TO_CHAR(FUN_CALCOLA_DATA_RIC(MIN(tcin.data_ricezione),V_TFINALE_ACK_TRASF),'MM/YYYY') -- MESE DI COMPENTENZA
FROM mnp.mnp_mvno_tc_in tcin
,mnp.mnp_gest_rich_donor_virt gr
WHERE tcin.id_richiesta_dbc = gr.id_richiesta
AND SUBSTR(tcin.id_richiesta_dbc,0,2)='DV'
AND tcin.tipo_evento = '01'
AND tcin.data_ricezione >= data_iniziale
AND tcin.data_ricezione < data_finale
GROUP BY gr.id_richiesta
, gr.data_cut_over_eff
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.msisdn;
-- ora carico le notifiche di sblocco credito anomalo
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta
, tipo_messaggio
, data_messaggio
, donor_rete
, recipient_rete
, dco_effettiva
, data_notifica_credito
, data_sbl_credito_anomalo
, t_iniziale
, t_finale
, processo
, nome_file
, nome_file_iniziale
, nome_file_finale
, donor_effettivo
, recipient_effettivo
, msisdn
, codice_richiesta_recipient
, ack_iniziale
, ack_finale
, data_attesa_evento_fin
, mese_comp_finale
)
SELECT UNIQUE gr.id_richiesta
, 'SLA Y'
, MIN(tcinSblCr.data_ricezione)
, 'TIMG'
, 'TIMG'
, gr.data_cut_over_eff
, MIN (tcinNtCr.data_ricezione) -- data notifica Credito
, MIN (tcinSblCr.data_ricezione) -- data sblocca credito anomalo
, FUN_CALCOLA_DATA_RIC( MIN (tcinNtCr.data_ricezione),V_TFINALE_ACK_TRASF) -- tempo iniziale, data di notifica Credito
, FUN_CALCOLA_DATA_RIC( MIN (tcinSblCr.data_ricezione),V_TFINALE_ACK_SBL_CRED_ANOM) -- tempo finale, data di sblocco Credito Anomalo
, 'V'
, NULL
, NULL
, NULL
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.msisdn
, gr.id_richiesta
, NULL
, NULL
, fun_giorni_piu(MIN (tcinNtCr.data_ricezione),5) -- data attesa evento finale
, TO_CHAR(FUN_CALCOLA_DATA_RIC(MIN(tcinSblCr.data_ricezione),V_TFINALE_ACK_SBL_CRED_ANOM),'MM/YYYY') -- mese di competenza
FROM mnp.mnp_mvno_tc_in tcinNtCr
,mnp.mnp_mvno_tc_in tcinSblCr
,mnp.mnp_gest_rich_donor_virt gr
WHERE tcinNtCr.id_richiesta_dbc = gr.id_richiesta
AND tcinSblCr.id_richiesta_dbc = gr.id_richiesta
AND SUBSTR(tcinNtCr.id_richiesta_dbc,0,2)='DV'
AND tcinNtCr.tipo_evento = '01'
AND SUBSTR(tcinSblCr.id_richiesta_dbc,0,2)='DV'
AND tcinSblCr.tipo_evento = '02'
AND tcinSblCr.data_ricezione >= data_iniziale
AND tcinSblCr.data_ricezione < data_finale
GROUP BY gr.id_richiesta
, gr.data_cut_over_eff
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.msisdn;
-- e infine le notifiche di sblocco importo
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta
, tipo_messaggio
, data_messaggio
, donor_rete
, recipient_rete
, dco_effettiva
, data_notifica_credito
, data_sbl_importo
, t_iniziale
, t_finale
, processo
, nome_file
, nome_file_iniziale
, nome_file_finale
, donor_effettivo
, recipient_effettivo
, msisdn
, codice_richiesta_recipient
, ack_iniziale
, ack_finale
, data_attesa_evento_fin
, mese_comp_finale
)
SELECT UNIQUE gr.id_richiesta
, 'SLA Z'
, MIN(tcinSblIm.data_ricezione)
, 'TIMG'
, 'TIMG'
, gr.data_cut_over_eff
, MIN (tcinNtCr.data_ricezione) -- data notifica Credito
, MIN (tcinSblIm.data_ricezione) -- data sblocca importo
, FUN_CALCOLA_DATA_RIC( MIN (tcinNtCr.data_ricezione) ,V_TFINALE_ACK_TRASF) --tempo iniziale, data di notifica Credito
, FUN_CALCOLA_DATA_RIC( MIN (tcinSblIm.data_ricezione),V_TFINALE_ACK_SBL_IMP) -- tempo finale, data di sblocco Importo
, 'V'
, NULL
, NULL
, NULL
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.msisdn
, gr.id_richiesta
, NULL
, NULL
, fun_giorni_piu(MIN (tcinNtCr.data_ricezione),5) -- data attesa evento finale
, TO_CHAR(FUN_CALCOLA_DATA_RIC(MIN(tcinSblIm.data_ricezione),V_TFINALE_ACK_SBL_IMP),'MM/YYYY') -- mese competenza
FROM mnp.mnp_mvno_tc_in tcinNtCr
,mnp.mnp_mvno_tc_in tcinSblIm
,mnp.mnp_gest_rich_donor_virt gr
WHERE tcinNtCr.id_richiesta_dbc = gr.id_richiesta
AND tcinSblIm.id_richiesta_dbc = gr.id_richiesta
AND SUBSTR(tcinNtCr.id_richiesta_dbc,0,2)='DV'
AND tcinNtCr.tipo_evento = '01'
AND SUBSTR(tcinSblIm.id_richiesta_dbc,0,2)='DV'
AND tcinSblIm.tipo_evento = '03'
AND tcinSblIm.data_ricezione >= data_iniziale
AND tcinSblIm.data_ricezione < data_finale
GROUP BY gr.id_richiesta
, gr.data_cut_over_eff
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.msisdn;
-- per le notifiche SI e SCA devo caricare la data della notifica relativa
/* UPDATE dwh.mnp_dw_sla_tc_out tcout SET
tcout.data_notifica_credito = (
SELECT tcin.data_ricezione
FROM mnp.mnp_mvno_tc_in@MNP tcin
WHERE tcin.id_richiesta_dbc = tcout.id_richiesta
AND tcin.tipo_evento = '01'
AND rownum = 1
)
WHERE tcout.data_notifica_credito IS NULL
AND tcout.tipo_messaggio != 'SLA X'
AND tcout.data_messaggio >= data_iniziale
AND tcout.data_messaggio < data_finale
;*/
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in CARICAMENTO_SLA_TC_DV_MVNO ' || SQLERRM);
RETURN;
END CARICAMENTO_SLA_TC_DV_MVNO;
/

View File

@@ -0,0 +1,262 @@
CREATE OR REPLACE PROCEDURE "DWH"."CARICAMENTO_SLA_TC_MVNO2MVNO"
( mese_in IN NUMBER
, anno_in IN NUMBER
, cod_errore OUT NUMBER
) AS
-- Purpose: Caricamento della tabella MNP_DW_SLA_TC_OUT
-- relativamente al processo Recipient Virtuale MVNO2MVNO
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- Alessandro De Simone 27/10/2009 Creazione script
-- Luca Alghisi K12-2012: introduzione dell'estrazione delle finestre temporali dalla tabella di configurazione
---------------------------------------
data_iniziale DATE;
data_finale DATE;
V_TFINALE_TRASF mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
V_TFINALE_ACK_TRASF mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
V_TFINALE_ACK_SBL_CRED_ANOM mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
V_TFINALE_ACK_SBL_IMP mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
BEGIN
cod_errore := 0;
-- calcolo le date iniziali e finali di interesse
data_iniziale := to_date('1-'|| mese_in||'-'|| anno_in,'DD-MM-YYYY');
data_finale := add_months(data_iniziale,+1);
DBMS_OUTPUT.put_line('Data iniziale = '|| data_iniziale);
DBMS_OUTPUT.put_line('Data finale = '|| data_finale);
SELECT REPLACE(T_FINALE,':'), REPLACE(T_FINALE_ACK,':')
INTO V_TFINALE_TRASF, V_TFINALE_ACK_TRASF
FROM MNP.MNP_ANAG_FINESTRE_TEMP_D147
WHERE DESC_FILE = 'TRASFERIMENTOCREDITO'
AND TIPO_FILE = 10;
--
SELECT REPLACE(T_FINALE_ACK,':')
INTO V_TFINALE_ACK_SBL_CRED_ANOM
FROM MNP.MNP_ANAG_FINESTRE_TEMP_D147
WHERE DESC_FILE = 'SBLOCCOCREDITOANOMALO'
AND TIPO_FILE = 11;
--
SELECT REPLACE(T_FINALE_ACK,':')
INTO V_TFINALE_ACK_SBL_IMP
FROM MNP.MNP_ANAG_FINESTRE_TEMP_D147
WHERE DESC_FILE = 'SBLOCCOIMPORTO'
AND TIPO_FILE = 12;
-- per prima cosa carichiamo le notifiche credito
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta
, tipo_messaggio
, data_messaggio
, donor_rete
, recipient_rete
, dco_effettiva
, data_notifica_credito
, t_iniziale
, t_finale
, processo
, nome_file
, nome_file_iniziale
, nome_file_finale
, donor_effettivo
, recipient_effettivo
, msisdn
, codice_richiesta_recipient
, ack_iniziale
, ack_finale
, data_attesa_evento_fin
, mese_comp_finale
)
SELECT UNIQUE gr.id_richiesta
, 'SLA X'
, MIN(tcin.data_ricezione)
, 'TIMG'
, 'TIMG'
, gr.data_cut_over_eff
, MIN (tcin.data_ricezione)
, MIN (gr.DATA_CUT_OVER_EFF) --tempo iniziale, data cut over
, FUN_CALCOLA_DATA_RIC(MIN(tcin.data_ricezione),V_TFINALE_ACK_TRASF) -- tempo finale, data di notifica credito
, 'V'
, NULL
, NULL
, NULL
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.msisdn
, gr.id_richiesta
, NULL
, NULL
, fun_giorni_piu(MIN (gr.DATA_CUT_OVER_EFF),2) -- data attesa evento finale
, TO_CHAR(FUN_CALCOLA_DATA_RIC(MIN(tcin.data_ricezione),V_TFINALE_ACK_TRASF),'MM/YYYY') -- mese competenza
FROM mnp.mnp_mvno_tc_in tcin
, mnp.mnp_gest_rich_rec_virt gr
WHERE tcin.id_richiesta_dbc = gr.id_richiesta
AND SUBSTR(tcin.id_richiesta_dbc,0,2)='RV'
AND tcin.tipo_evento = '01'
AND tcin.data_ricezione >= data_iniziale
AND tcin.data_ricezione < data_finale
GROUP BY gr.id_richiesta
, 'SLA X'
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.data_cut_over_eff
, gr.msisdn;
-- ora carico le notifiche di sblocco credito anomalo
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta
, tipo_messaggio
, data_messaggio
, donor_rete
, recipient_rete
, dco_effettiva
, data_notifica_credito
, data_sbl_credito_anomalo
, t_iniziale
, t_finale
, processo
, nome_file
, nome_file_iniziale
, nome_file_finale
, donor_effettivo
, recipient_effettivo
, msisdn
, codice_richiesta_recipient
, ack_iniziale
, ack_finale
, data_attesa_evento_fin
, mese_comp_finale
)
SELECT UNIQUE gr.id_richiesta
, 'SLA Y'
, MIN(tcinSblCr.data_ricezione)
, 'TIMG'
, 'TIMG'
, gr.data_cut_over_eff
, MIN (tcinNtCr.data_ricezione)
, MIN (tcinSblCr.data_ricezione)
, FUN_CALCOLA_DATA_RIC( MIN (tcinNtCr.data_ricezione),V_TFINALE_ACK_TRASF) -- tempo iniziale, data di notifica credito
, FUN_CALCOLA_DATA_RIC( MIN (tcinSblCr.data_ricezione) ,V_TFINALE_ACK_SBL_CRED_ANOM) -- tempo finale, data di sblocco anomalo
, 'V'
, NULL
, NULL
, NULL
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.msisdn
, gr.id_richiesta
, NULL
, NULL
, fun_giorni_piu(FUN_CALCOLA_DATA_RIC(MIN(tcinNtCr.data_ricezione),V_TFINALE_ACK_TRASF),5) -- data attesa evento finale
, TO_CHAR(FUN_CALCOLA_DATA_RIC(MIN(tcinSblCr.data_ricezione),V_TFINALE_ACK_SBL_CRED_ANOM),'MM/YYYY') ---- mese competenza 05/10/10 modificata su Tf
FROM mnp.mnp_mvno_tc_in tcinNtCr
, mnp.mnp_mvno_tc_in tcinSblCr
, mnp.mnp_gest_rich_rec_virt gr
WHERE tcinNtCr.id_richiesta_dbc = gr.id_richiesta
AND tcinSblCr.id_richiesta_dbc = gr.id_richiesta
AND SUBSTR(tcinNtCr.id_richiesta_dbc,0,2)='RV'
AND tcinNtCr.tipo_evento = '01'
AND SUBSTR(tcinSblCr.id_richiesta_dbc,0,2)='RV'
AND tcinSblCr.tipo_evento = '02'
AND tcinSblCr.data_ricezione >= data_iniziale
AND tcinSblCr.data_ricezione < data_finale
GROUP BY gr.id_richiesta
, 'SLA Y'
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.data_cut_over_eff
, gr.msisdn;
-- ora carico le notifiche di sblocco importo
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta
, tipo_messaggio
, data_messaggio
, donor_rete
, recipient_rete
, dco_effettiva
, data_notifica_credito
, data_sbl_importo
, t_iniziale
, t_finale
, processo
, nome_file
, nome_file_iniziale
, nome_file_finale
, donor_effettivo
, recipient_effettivo
, msisdn
, codice_richiesta_recipient
, ack_iniziale
, ack_finale
, data_attesa_evento_fin
, mese_comp_finale
)
SELECT UNIQUE gr.id_richiesta
, 'SLA Z'
, MIN(tcinSblIm.data_ricezione)
, 'TIMG'
, 'TIMG'
, gr.data_cut_over_eff
, MIN (tcinNtCr.data_ricezione)
, MIN (tcinSblIm.data_ricezione)
, FUN_CALCOLA_DATA_RIC( MIN (tcinNtCr.data_ricezione), V_TFINALE_ACK_TRASF) -- tempo iniziale, data di notifica Credito
, FUN_CALCOLA_DATA_RIC( MIN (tcinSblIm.data_ricezione), V_TFINALE_ACK_SBL_IMP) -- tempo finale, data di sblocco importo
, 'V'
, NULL
, NULL
, NULL
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.msisdn
, gr.id_richiesta
, NULL
, NULL
, fun_giorni_piu(FUN_CALCOLA_DATA_RIC( MIN (tcinNtCr.data_ricezione), V_TFINALE_ACK_TRASF),5) -- data attesa evento
, TO_CHAR(FUN_CALCOLA_DATA_RIC(MIN(tcinSblIm.data_ricezione),V_TFINALE_ACK_SBL_IMP),'MM/YYYY') -- mese competenza
FROM mnp.mnp_mvno_tc_in tcinNtCr
, mnp.mnp_mvno_tc_in tcinSblIm
, mnp.mnp_gest_rich_rec_virt gr
WHERE tcinNtCr.id_richiesta_dbc = gr.id_richiesta
AND tcinSblIm.id_richiesta_dbc = gr.id_richiesta
AND SUBSTR(tcinNtCr.id_richiesta_dbc,0,2)='RV'
AND tcinNtCr.tipo_evento = '01'
AND SUBSTR(tcinSblIm.id_richiesta_dbc,0,2)='RV'
AND tcinSblIm.tipo_evento = '03'
AND tcinSblIm.data_ricezione >= data_iniziale
AND tcinSblIm.data_ricezione < data_finale
GROUP BY gr.id_richiesta
, 'SLA Z'
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.data_cut_over_eff
, gr.msisdn;
-- per le notifiche SI e SCA devo caricare la data della notifica relativa
/* UPDATE dwh.mnp_dw_sla_tc_out tcout SET
tcout.data_notifica_credito = (
SELECT tcin.data_ricezione
FROM mnp.mnp_mvno_tc_in@MNP tcin
WHERE tcin.id_richiesta_dbc = tcout.id_richiesta
AND tcin.tipo_evento = '01'
AND rownum = 1
)
WHERE tcout.data_notifica_credito IS NULL
AND tcout.tipo_messaggio != 'SLA X'
AND tcout.data_messaggio >= data_iniziale
AND tcout.data_messaggio < data_finale
;*/
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in CARICAMENTO_SLA_TC_RV_MVNO2MVNO ' || SQLERRM);
RETURN;
END CARICAMENTO_SLA_TC_MVNO2MVNO;
/

View File

@@ -0,0 +1,313 @@
CREATE OR REPLACE PROCEDURE DWH."CARICAMENTO_SLA_TC_REC"
( mese_in IN NUMBER
, anno_in IN NUMBER
, cod_errore OUT NUMBER
) AS
-- Purpose: Caricamento della tabella MNP_DW_SLA_TC_OUT
-- relativamente al processo RECIPIENT
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- Alessandro De Simone 27/10/2009 Creazione script
-- Luca Alghisi K12-2012: introduzione dell'estrazione delle finestre temporali dalla tabella di configurazione
---------------------------------------
data_iniziale DATE;
data_finale DATE;
V_TFINALE_ESPL mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
V_TFINALE_ACK_ESPL mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
V_TFINALE_TRASF mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
V_TFINALE_ACK_TRASF mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
V_TFINALE_SBL_CRED_ANOM mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
V_TFINALE_ACK_SBL_CRED_ANOM mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
V_TFINALE_SBL_IMP mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
V_TFINALE_ACK_SBL_IMP mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
BEGIN
cod_errore := 0;
-- calcolo le date iniziali e finali di interesse
data_iniziale := to_date('1-'|| mese_in||'-'|| anno_in,'DD-MM-YYYY');
data_finale := add_months(data_iniziale,+1);
-- DBMS_OUTPUT.put_line('Data iniziale = '|| data_iniziale);
-- DBMS_OUTPUT.put_line('Data finale = '|| data_finale);
-- ESTRAZIONE ORARI DI CHIUSURA DELLA FINESTRE PER GLI SLA X-Y-Z
SELECT REPLACE(T_FINALE,':'), REPLACE(T_FINALE_ACK,':')
INTO V_TFINALE_ESPL, V_TFINALE_ACK_ESPL
FROM MNP.MNP_ANAG_FINESTRE_TEMP_D147
WHERE DESC_FILE = 'ESPLETAMENTO'
AND TIPO_FILE = 6;
--
SELECT REPLACE(T_FINALE,':'), REPLACE(T_FINALE_ACK,':')
INTO V_TFINALE_TRASF, V_TFINALE_ACK_TRASF
FROM MNP.MNP_ANAG_FINESTRE_TEMP_D147
WHERE DESC_FILE = 'TRASFERIMENTOCREDITO'
AND TIPO_FILE = 10;
--
SELECT REPLACE(T_FINALE,':'), REPLACE(T_FINALE_ACK,':')
INTO V_TFINALE_SBL_CRED_ANOM, V_TFINALE_ACK_SBL_CRED_ANOM
FROM MNP.MNP_ANAG_FINESTRE_TEMP_D147
WHERE DESC_FILE = 'SBLOCCOCREDITOANOMALO'
AND TIPO_FILE = 11;
--
SELECT REPLACE(T_FINALE,':'), REPLACE(T_FINALE_ACK,':')
INTO V_TFINALE_SBL_IMP, V_TFINALE_ACK_SBL_IMP
FROM MNP.MNP_ANAG_FINESTRE_TEMP_D147
WHERE DESC_FILE = 'SBLOCCOIMPORTO'
AND TIPO_FILE = 12;
-- per prima cosa carichiamo le notifiche credito
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta
, tipo_messaggio
, data_messaggio
, donor_rete
, recipient_rete
, dco_effettiva
, data_notifica_credito
, t_iniziale
, t_finale
, processo
, nome_file
, nome_file_iniziale
, nome_file_finale
, donor_effettivo
, recipient_effettivo
, msisdn
, codice_richiesta_recipient
, ack_iniziale
, ack_finale
, data_attesa_evento_fin
, mese_comp_finale,t_finale_altro_aom
)
SELECT UNIQUE gr.id_richiesta
, 'SLA X'
, MIN(trasXml.data_eff)
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.data_cut_over_eff
, MIN(FUN_CALCOLA_DATA(trasAckOut.nome_file, V_TFINALE_ACK_TRASF, trasAckOut.data_inserimento)) -- data notifica credito
, MIN(FUN_CALCOLA_DATA(espAckOut.nome_file, V_TFINALE_ACK_ESPL, espAckOut.data_inserimento)) -- TI data Ack in risposta all'Espletamento del Donating
, MIN(FUN_CALCOLA_DATA(trasAckOut.nome_file, V_TFINALE_ACK_TRASF, trasAckOut.data_inserimento)) -- TF data Ack in risposta alla notifica Credito
, 'R'
, MIN(trasXml.nome_file)
, MIN(espXml.nome_file)
, MIN(trasXml.nome_file)
, gr.codice_operatore_don_eff
, gr.codice_operatore_rec_eff
, gr.msisdn
, gr.id_richiesta
, MIN(espAckOut.nome_file)
, MIN(trasAckOut.nome_file)
, fun_giorni_piu(MIN (fun_calcola_data (espAckOut.nome_file, V_TFINALE_ACK_ESPL, espAckOut.data_inserimento)),2) -- data attesa evento finale
, TO_CHAR(MIN(FUN_CALCOLA_DATA(trasAckOut.NOME_FILE, V_TFINALE_ACK_TRASF, trasAckOut.data_inserimento)), 'MM/YYYY') -- mese competenza
, MIN(FUN_CALCOLA_DATA(trasXml.nome_file, V_TFINALE_TRASF, trasXml.data_EFF))
FROM mnp.mnp_xml_ack_out trasAckOut
, mnp.mnp_xml_ack_out espAckOut
, mnp.mnp_xml_in trasXml
, mnp.mnp_xml_in espXml
, mnp.mnp_xml_richiesta_in rTrasIn
, mnp.mnp_xml_richiesta_in rEspIn
, mnp.mnp_gestione_richiesta_rec gr
WHERE trasAckOut.risultato = 'OK'
AND espAckOut.risultato = 'OK'
AND espXml.MITTENTE = gr.codice_operatore_donating -- VERIFICARE
AND trasAckOut.nome_file_riferito = trasXml.nome_file
AND trasXml.nome_file = rTrasIn.nome_file
AND rTrasin.id_richiesta = gr.id_richiesta
AND trasXml.tipo_file = 10
AND espAckOut.nome_file_riferito = espXml.nome_file
AND espXml.nome_file =rEspIn.nome_file
AND rEspIn.id_richiesta = gr.id_richiesta
AND espXml.tipo_file = 6
AND trasAckOut.data_inserimento >= data_iniziale
AND trasAckOut.data_inserimento < data_finale
GROUP BY gr.id_richiesta
,gr.codice_operatore_donating
,gr.codice_operatore_recipient
,gr.codice_operatore_don_eff
,GR.CODICE_OPERATORE_REC_EFF
,gr.msisdn
,gr.data_cut_over_eff;
-- ora carico le sblocco credito anomalo
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta
, tipo_messaggio
, data_messaggio
, donor_rete
, recipient_rete
, dco_effettiva
, data_notifica_credito
, data_sbl_credito_anomalo
, t_iniziale
, t_finale
, processo
, nome_file
, nome_file_iniziale
, nome_file_finale
, donor_effettivo
, recipient_effettivo
, msisdn
, codice_richiesta_recipient
, ack_iniziale
, ack_finale
, data_attesa_evento_fin
, mese_comp_finale,t_finale_altro_aom
)
SELECT UNIQUE gr.id_richiesta
, 'SLA Y'
, MIN(sblCrXml.data_eff)
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.data_cut_over_eff
, MIN(FUN_CALCOLA_DATA(trasAckOut.nome_file, V_TFINALE_ACK_TRASF, trasAckOut.data_inserimento)) -- data notifica credito
, MIN(FUN_CALCOLA_DATA(sblCrAckOut.nome_file, V_TFINALE_ACK_SBL_CRED_ANOM, sblCrAckOut.data_inserimento)) -- data sblocco credito anomalo
, MIN(FUN_CALCOLA_DATA(trasAckOut.nome_file, V_TFINALE_ACK_TRASF, trasAckOut.data_inserimento)) -- TI data Ack in risposta alla notifica Credito
, MIN(FUN_CALCOLA_DATA(sblCrAckOut.nome_file, V_TFINALE_ACK_SBL_CRED_ANOM, sblCrAckOut.data_inserimento)) -- TF data Ack in risposta allo sblocco Credito anomalo
, 'R'
, MIN(sblCrXml.nome_file)
, MIN(trasXml.nome_file)
, MIN(sblCrXml.nome_file)
, gr.codice_operatore_don_eff
, gr.codice_operatore_rec_eff
, gr.msisdn
, gr.id_richiesta
, MIN(trasAckOut.nome_file)
, MIN(sblCrAckOut.nome_file)
, fun_giorni_piu(MIN (fun_calcola_data (trasAckOut.nome_file, V_TFINALE_ACK_TRASF, trasAckOut.data_inserimento)),5) -- data attesa evento finale
, TO_CHAR(MIN(FUN_CALCOLA_DATA(sblCrAckOut.NOME_FILE, V_TFINALE_ACK_SBL_CRED_ANOM, sblCrAckOut.data_inserimento)), 'MM/YYYY') -- mese competenza
, MIN(FUN_CALCOLA_DATA(sblCrXml.nome_file, V_TFINALE_SBL_CRED_ANOM, sblCrXml.data_EFF))
FROM mnp.mnp_xml_ack_out trasAckOut
, mnp.mnp_xml_ack_out sblCrAckOut
, mnp.mnp_xml_in trasXml
, mnp.mnp_xml_in sblCrXml
, mnp.mnp_xml_richiesta_in rTrasIn
, mnp.mnp_xml_richiesta_in rSblCrIn
, mnp.mnp_gestione_richiesta_rec gr
WHERE trasAckOut.risultato = 'OK'
AND sblCrAckOut.risultato = 'OK'
AND trasAckOut.nome_file_riferito = trasXml.nome_file
AND trasXml.nome_file = rTrasIn.nome_file
AND rTrasin.id_richiesta = gr.id_richiesta
AND trasXml.tipo_file = 10
AND sblCrAckOut.nome_file_riferito = sblCrXml.nome_file
AND sblCrXml.nome_file =rSblCrIn.nome_file
AND rSblCrIn.id_richiesta = gr.id_richiesta
and sblCrXml.tipo_file = 11
AND sblCrAckOut.data_inserimento >= data_iniziale
AND sblCrAckOut.data_inserimento < data_finale
GROUP BY gr.id_richiesta
,gr.codice_operatore_donating
,gr.codice_operatore_recipient
,gr.codice_operatore_don_eff
,GR.CODICE_OPERATORE_REC_EFF
,gr.msisdn
,gr.data_cut_over_eff
;
-- e infine le notifiche di sblocco importo
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta
, tipo_messaggio
, data_messaggio
, donor_rete
, recipient_rete
, dco_effettiva
, data_notifica_credito
, data_sbl_importo
, t_iniziale
, t_finale
, processo
, nome_file
, nome_file_iniziale
, nome_file_finale
, donor_effettivo
, recipient_effettivo
, msisdn
, codice_richiesta_recipient
, ack_iniziale
, ack_finale
, data_attesa_evento_fin
, mese_comp_finale,t_finale_altro_aom
)
SELECT UNIQUE gr.id_richiesta
, 'SLA Z'
, MIN(sblImXml.data_eff)
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.data_cut_over_eff
, MIN(FUN_CALCOLA_DATA(trasAckOut.nome_file, V_TFINALE_ACK_TRASF, trasAckOut.data_inserimento)) -- data notifica credito
, MIN(FUN_CALCOLA_DATA(sblImAckOut.nome_file, V_TFINALE_ACK_SBL_IMP, sblImAckOut.data_inserimento)) -- data sblocco importo
, MIN(FUN_CALCOLA_DATA(trasAckOut.nome_file, V_TFINALE_ACK_TRASF, trasAckOut.data_inserimento)) -- TI data Ack in risposta alla notifica Credito
, MIN(FUN_CALCOLA_DATA(sblImAckOut.nome_file, V_TFINALE_ACK_SBL_IMP, sblImAckOut.data_inserimento)) -- TF data Ack in risposta allo sblocco Importo
, 'R'
, MIN(sblImXml.nome_file)
, MIN(trasXml.nome_file)
, MIN(sblImXml.nome_file)
, gr.codice_operatore_don_eff
, gr.codice_operatore_rec_eff
, gr.msisdn
, gr.id_richiesta
, MIN(trasAckOut.nome_file)
, MIN(sblImAckOut.nome_file)
, fun_giorni_piu(MIN(fun_calcola_data(trasAckOut.nome_file, V_TFINALE_ACK_TRASF, trasAckOut.data_inserimento)),5) -- data attesa evento finale
, TO_CHAR(MIN(FUN_CALCOLA_DATA(sblImAckOut.NOME_FILE, V_TFINALE_ACK_SBL_IMP, sblImAckOut.data_inserimento)),'MM/YYYY') -- mese competenza
, MIN(FUN_CALCOLA_DATA(sblImXml.nome_file, V_TFINALE_SBL_IMP, sblImXml.data_EFF))
FROM mnp.mnp_xml_ack_out trasAckOut
, mnp.mnp_xml_ack_out sblImAckOut
, mnp.mnp_xml_in trasXml
, mnp.mnp_xml_in sblImXml
, mnp.mnp_xml_richiesta_in rTrasIn
, mnp.mnp_xml_richiesta_in rSblImIn
, mnp.mnp_gestione_richiesta_rec gr
WHERE trasAckOut.risultato = 'OK'
AND sblImAckOut.risultato = 'OK'
AND trasAckOut.nome_file_riferito = trasXml.nome_file
AND trasXml.nome_file = rTrasIn.nome_file
AND rTrasin.id_richiesta = gr.id_richiesta
AND trasXml.tipo_file = 10
AND sblImAckOut.nome_file_riferito = sblImXml.nome_file
AND sblImXml.nome_file =rSblImIn.nome_file
AND rSblImIn.id_richiesta = gr.id_richiesta
and sblImXml.tipo_file = 12
AND sblImAckOut.data_inserimento >= data_iniziale
AND sblImAckOut.data_inserimento < data_finale
GROUP BY gr.id_richiesta
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.codice_operatore_don_eff
, GR.CODICE_OPERATORE_REC_EFF
, gr.msisdn
, gr.data_cut_over_eff
;
-- per le notifiche SI e SCA devo caricare la data della notifica relativa
/* UPDATE dwh.mnp_dw_sla_tc_out tcout SET
tcout.data_notifica_credito = (
SELECT FUN_CALCOLA_DATA(rich.nome_file,rich.data_eff)
FROM mnp.mnp_xml_richiesta_in rich, mnp.mnp_xml_in ncxml
WHERE rich.id_richiesta = tcout.id_richiesta
AND NCXML.NOME_FILE=RICH.NOME_FILE
AND ncxml.tipo_file = '10'
AND rownum = 1
)
WHERE data_notifica_credito IS NULL
AND tcout.tipo_messaggio != 'SLA X'
AND tcout.data_messaggio >= data_iniziale
AND tcout.data_messaggio < data_finale
;*/
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA_TC_REC ' || SQLERRM);
RETURN;
END CARICAMENTO_SLA_TC_REC;
/

View File

@@ -0,0 +1,186 @@
CREATE OR REPLACE PROCEDURE "DWH"."CARICAMENTO_SLA_TC_RV_ESP"
( mese_in IN NUMBER
, anno_in IN NUMBER
, cod_errore OUT NUMBER
) AS
-- Purpose: Caricamento della tabella MNP_DW_SLA_TC_OUT
-- relativamente al processo Recipient Virtuale ESP
-- Per comodità di implementazione, estrae anche record
-- relativi al processo Recipient Virtuale MVNO
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- Alessandro De Simone 27/10/2009 Creazione script
---------------------------------------
data_iniziale DATE;
data_finale DATE;
BEGIN
cod_errore := 0;
-- calcolo le date iniziali e finali di interesse
data_iniziale := to_date('1-'|| mese_in||'-'|| anno_in,'DD-MM-YYYY');
data_finale := add_months(data_iniziale,+1);
-- DBMS_OUTPUT.put_line('Data iniziale = '|| data_iniziale);
-- DBMS_OUTPUT.put_line('Data finale = '|| data_finale);
-- per prima cosa carichiamo le notifiche credito
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta
, tipo_messaggio
, data_messaggio
, donor_rete
, recipient_rete
, dco_effettiva
, data_notifica_credito
, t_iniziale
, t_finale
, processo
, nome_file
, nome_file_iniziale
, nome_file_finale
, donor_effettivo
, recipient_effettivo
, msisdn
, codice_richiesta_recipient
, ack_iniziale
, ack_finale
, data_attesa_evento_fin
, mese_comp_finale
)
SELECT UNIQUE gr.id_richiesta
, 'SLA X'
, MIN(tcin.data_ricezione)
, 'TIMG'
, 'TIMG'
, gr.data_cut_over_eff
, MIN (tcin.data_ricezione)
, MIN (gr.data_cut_over_eff) --tempo iniziale, data di validazione del porting ----05/10/10 modificata in data_cut_over_eff
, FUN_CALCOLA_DATA_RIC( MIN (tcin.data_ricezione),0) -- tempo finale, data di notifica credito
, 'V'
, NULL
, NULL
, NULL
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.msisdn
, gr.id_richiesta
, NULL
, NULL
, fun_giorni_piu(MIN (gr.data_cut_over_eff),2)--MIN(grVal.data_i_o)
, TO_CHAR(FUN_CALCOLA_DATA_RIC( MIN(tcin.data_ricezione),0),'MM/YYYY') --05/10/10 modificata su Tf
FROM mnp.mnp_msp_tc_in@MNP tcin
, mnp.mnp_gest_rich_rec_virt@MNP gr
-- , mnp.mnp_storico_rich_rec_virt@MNP grVal
WHERE tcin.id_richiesta_dbc = gr.id_richiesta
-- AND gr.id_richiesta = grVal.id_richiesta
AND SUBSTR(tcin.id_richiesta_dbc,0,2)='RV'
AND tcin.tipo_evento = '01'
AND gr.flag_esp = 1
-- AND grVal.stato_a in (6,7)
AND tcin.data_ricezione >= data_iniziale
AND tcin.data_ricezione < data_finale
GROUP BY gr.id_richiesta
,gr.data_cut_over_eff
,gr.codice_operatore_donating
,gr.codice_operatore_recipient
,gr.msisdn
;
-- ora carico le notifiche di sblocco importo
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta
, tipo_messaggio
, data_messaggio
, donor_rete
, recipient_rete
, dco_effettiva
, data_notifica_credito
, data_sbl_importo
, t_iniziale
, t_finale
, processo
, nome_file
, nome_file_iniziale
, nome_file_finale
, donor_effettivo
, recipient_effettivo
, msisdn
, codice_richiesta_recipient
, ack_iniziale
, ack_finale
, data_attesa_evento_fin
, mese_comp_finale
)
SELECT UNIQUE gr.id_richiesta
, 'SLA Z'
, MIN(tcinSblIm.data_ricezione)
, 'TIMG'
, 'TIMG'
, gr.data_cut_over_eff
, MIN (tcinNtCr.data_ricezione)
, MIN (tcinSblIm.data_ricezione)
, FUN_CALCOLA_DATA_RIC( MIN(tcinNtCr.data_ricezione),1) --tempo iniziale, data di notifica cretito
, FUN_CALCOLA_DATA_RIC( MIN (tcinSblIm.data_ricezione),0) -- tempo finale, data di sblocco importo
, 'V'
, NULL
, NULL
, NULL
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.msisdn
, gr.id_richiesta
, NULL
, NULL
, fun_giorni_piu(MIN (tcinNtCr.data_ricezione),5)--MIN(grVal.data_i_o)
, TO_CHAR(FUN_CALCOLA_DATA_RIC( MIN(tcinSblIm.data_ricezione),0),'MM/YYYY') --- 05/10/10 spostato su Tf
FROM mnp.mnp_msp_tc_in@MNP tcinSblIm
, mnp.mnp_msp_tc_in@MNP tcinNtCr
, mnp.mnp_gest_rich_rec_virt@MNP gr
-- , mnp.mnp_storico_rich_rec_virt@MNP grVal
WHERE tcinNtCr.id_richiesta_dbc = gr.id_richiesta
AND tcinSblIm.id_richiesta_dbc = gr.id_richiesta
-- AND gr.id_richiesta = grVal.id_richiesta
AND SUBSTR(tcinNtCr.id_richiesta_dbc,0,2)='RV'
AND tcinNtCr.tipo_evento = '01'
AND SUBSTR(tcinSblIm.id_richiesta_dbc,0,2)='RV'
AND tcinSblIm.tipo_evento = '03'
AND gr.flag_esp = 1
--AND grVal.stato_a in (6,7)
AND tcinSblIm.data_ricezione >= data_iniziale
AND tcinSblIm.data_ricezione < data_finale
GROUP BY gr.id_richiesta
,gr.data_cut_over_eff
,gr.codice_operatore_donating
,gr.codice_operatore_recipient
,gr.msisdn
;
-- per le notifiche SI devo caricare la data della notifica relativa
/*UPDATE dwh.mnp_dw_sla_tc_out tcout SET
tcout.data_notifica_credito = (
SELECT tcin.data_ricezione
FROM mnp.mnp_msp_tc_in@MNP tcin
WHERE tcin.id_richiesta_dbc = tcout.id_richiesta
AND tcin.tipo_evento = '01'
AND rownum = 1
)
WHERE tcout.data_notifica_credito IS NULL
AND tcout.tipo_messaggio != 'SLA X'
AND tcout.data_messaggio >= data_iniziale
AND tcout.data_messaggio < data_finale
;*/
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in CARICAMENTO_SLA_TC_RV_ESP ' || SQLERRM);
RETURN;
END CARICAMENTO_SLA_TC_RV_ESP;
/

View File

@@ -0,0 +1,189 @@
CREATE OR REPLACE PROCEDURE "DWH"."CARICAMENTO_SLA_TC_RV_MVNO"
( mese_in IN NUMBER
, anno_in IN NUMBER
, cod_errore OUT NUMBER
) AS
-- Purpose: Caricamento della tabella MNP_DW_SLA_TC_OUT
-- relativamente al processo Recipient Virtuale MVNO
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- Alessandro De Simone 27/10/2009 Creazione script
-- Luca Alghisi K12-2012: introduzione dell'estrazione delle finestre temporali dalla tabella di configurazione
---------------------------------------
data_iniziale DATE;
data_finale DATE;
V_TFINALE_TRASF mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
V_TFINALE_ACK_TRASF mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
V_TFINALE_SBL_IMP mnp.MNP_ANAG_FINESTRE_TEMP_D147.T_FINALE%type;
BEGIN
cod_errore := 0;
-- calcolo le date iniziali e finali di interesse
data_iniziale := to_date('1-'|| mese_in||'-'|| anno_in,'DD-MM-YYYY');
data_finale := add_months(data_iniziale,+1);
-- DBMS_OUTPUT.put_line('Data iniziale = '|| data_iniziale);
-- DBMS_OUTPUT.put_line('Data finale = '|| data_finale);
SELECT REPLACE(T_FINALE,':'), REPLACE(T_FINALE_ACK,':')
INTO V_TFINALE_TRASF, V_TFINALE_ACK_TRASF
FROM MNP.MNP_ANAG_FINESTRE_TEMP_D147
WHERE DESC_FILE = 'TRASFERIMENTOCREDITO'
AND TIPO_FILE = 10;
--
SELECT REPLACE(T_FINALE,':')
INTO V_TFINALE_SBL_IMP
FROM MNP.MNP_ANAG_FINESTRE_TEMP_D147
WHERE DESC_FILE = 'SBLOCCOIMPORTO'
AND TIPO_FILE = 12;
-- per prima cosa carichiamo le notifiche credito
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta
, tipo_messaggio
, data_messaggio
, donor_rete
, recipient_rete
, dco_effettiva
, data_notifica_credito
, t_iniziale
, t_finale
, processo
, nome_file
, nome_file_iniziale
, nome_file_finale
, donor_effettivo
, recipient_effettivo
, msisdn
, codice_richiesta_recipient
, ack_iniziale
, ack_finale
, data_attesa_evento_fin
, mese_comp_finale
)
SELECT UNIQUE gr.id_richiesta
, 'SLA X'
, MIN(tcin.data_ricezione)
, 'TIMG'
, 'TIMG'
, gr.data_cut_over_eff
, MIN (tcin.data_ricezione)
, gr.data_cut_over_eff -- tempo iniziale, data di validazione del porting -- 05/10/10: sostituita con DATA_CUT_OVER_EFF
, FUN_CALCOLA_DATA_RIC(MIN(tcin.data_ricezione),V_TFINALE_TRASF) -- tempo finale, data di notifica credito
, 'V'
, NULL
, NULL
, NULL
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.msisdn
, gr.id_richiesta
, NULL
, NULL
, fun_giorni_piu(MIN (gr.data_cut_over_eff),2) -- data attesa evento finale
, TO_CHAR(FUN_CALCOLA_DATA_RIC(MIN(tcin.data_ricezione),V_TFINALE_TRASF),'MM/YYYY') -- mese competenza
FROM mnp.mnp_msp_tc_in tcin
, mnp.mnp_gest_rich_rec_virt gr
WHERE tcin.id_richiesta_dbc = gr.id_richiesta
AND SUBSTR(tcin.id_richiesta_dbc,0,2)='RV'
AND tcin.tipo_evento = '01'
AND gr.flag_esp = 0
AND tcin.data_ricezione >= data_iniziale
AND tcin.data_ricezione < data_finale
GROUP BY gr.id_richiesta
,gr.data_cut_over_eff
,gr.codice_operatore_donating
,gr.codice_operatore_recipient
,gr.msisdn;
-- ora carico le notifiche di sblocco importo
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta
, tipo_messaggio
, data_messaggio
, donor_rete
, recipient_rete
, dco_effettiva
, data_notifica_credito
, data_sbl_importo
, t_iniziale
, t_finale
, processo
, nome_file
, nome_file_iniziale
, nome_file_finale
, donor_effettivo
, recipient_effettivo
, msisdn
, codice_richiesta_recipient
, ack_iniziale
, ack_finale
, data_attesa_evento_fin
, mese_comp_finale
)
SELECT UNIQUE gr.id_richiesta
, 'SLA Z'
, MIN(tcinSblIm.data_ricezione)
, 'TIMG'
, 'TIMG'
, gr.data_cut_over_eff
, MIN (tcinNtCr.data_ricezione)
, MIN (tcinSblIm.data_ricezione)
, FUN_CALCOLA_DATA_RIC( MIN (tcinNtCr.data_ricezione),V_TFINALE_ACK_TRASF) -- tempo iniziale, data di notifica cretito
, FUN_CALCOLA_DATA_RIC( MIN (tcinSblIm.data_ricezione),V_TFINALE_SBL_IMP) -- tempo finale, data di sblocco importo
, 'V'
, NULL
, NULL
, NULL
, gr.codice_operatore_donating
, gr.codice_operatore_recipient
, gr.msisdn
, gr.id_richiesta
, NULL
, NULL
, fun_giorni_piu(MIN (tcinNtCr.data_ricezione),5) -- data attesa evento finale
, TO_CHAR(FUN_CALCOLA_DATA_RIC(MIN(tcinSblIm.data_ricezione),V_TFINALE_SBL_IMP),'MM/YYYY') -- mese competenza 05/10/10 Modificato su tcinSblIm.data_ricezione evento Finale
FROM mnp.mnp_msp_tc_in tcinSblIm
, mnp.mnp_msp_tc_in tcinNtCr
, mnp.mnp_gest_rich_rec_virt gr
WHERE tcinNtCr.id_richiesta_dbc = gr.id_richiesta
AND tcinSblIm.id_richiesta_dbc = gr.id_richiesta
AND SUBSTR(tcinNtCr.id_richiesta_dbc,0,2)='RV'
AND tcinNtCr.tipo_evento = '01'
AND SUBSTR(tcinSblIm.id_richiesta_dbc,0,2)='RV'
AND tcinSblIm.tipo_evento = '03'
AND gr.flag_esp = 0
AND tcinSblIm.data_ricezione >= data_iniziale
AND tcinSblIm.data_ricezione < data_finale
GROUP BY gr.id_richiesta
,gr.data_cut_over_eff
,gr.codice_operatore_donating
,gr.codice_operatore_recipient
,gr.msisdn;
-- per le notifiche SI devo caricare la data della notifica relativa
/* UPDATE dwh.mnp_dw_sla_tc_out tcout SET
tcout.data_notifica_credito = (
SELECT tcin.data_ricezione
FROM mnp.mnp_mspcoop_tc_in@MNP tcin
WHERE tcin.id_richiesta_dbc = tcout.id_richiesta
AND tcin.tipo_evento = '01'
AND rownum = 1
)
WHERE tcout.data_notifica_credito IS NULL
AND tcout.tipo_messaggio != 'SLA X'
AND tcout.data_messaggio >= data_iniziale
AND tcout.data_messaggio < data_finale
;*/
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in CARICAMENTO_SLA_TC_RV_MVNO ' || SQLERRM);
RETURN;
END CARICAMENTO_SLA_TC_RV_MVNO;
/

View File

@@ -0,0 +1,396 @@
CREATE OR REPLACE PROCEDURE CALCOLA_SLA_DONOR (
mese_in IN NUMBER,
anno_in IN NUMBER,
cod_errore IN OUT NUMBER
)
IS
-- Purpose: Calcolo degli SLA Donor
-- La procedura calcola gli SLA Donor relativi al mese di riferimento per tutte
-- le richieste contenute nella tabella MNP_DW_DONOR_DELTA ed inserisce un record
-- con i valori caolcolati nella tabella MNP_DW_DONOR_SLA
-- MODIFICATION HISTORY
-- A.Parati 15/07/2004 Versione Iniziale
-- A.Parati 22/07/2004 Modifica all'algoritmo di calcolo degli SLA
-- A.Parati 17/08/2004 Correzione errori di calcolo
-- L.Marcucci 15/10/2004 Correzione errori di calcolo SLA1 e SLA2
ultimo_giorno_mese DATE;
-- Ultimo giorno lavorativo del mese di riferiemnto
primo_giorno_mese DATE;
-- Primo giorno lavorativo del mese di riferimento
app_id_richiesta dwh.mnp_dw_donor_delta.id_richiesta%TYPE;
-- identificativo della richiesta di cui calcolare gli sla
sla0_minore dwh.mnp_dw_donor_sla.sla_zero_minore%TYPE;
-- numero di giorni di SLA0<=4 relativi al mese calcolato su SLA precedenti
sla0_maggiore dwh.mnp_dw_donor_sla.sla_zero_maggiore%TYPE;
-- numero di giorni di SLA0>4 relativi al mese calcolato su SLA precedenti
sla1_minore dwh.mnp_dw_donor_sla.sla_uno_minore%TYPE;
-- numero di giorni di SLA1<=4 relativi al mese
sla1_maggiore dwh.mnp_dw_donor_sla.sla_uno_maggiore%TYPE;
-- numero di giorni di SLA1>4 relativi al mese
sla2_minore dwh.mnp_dw_donor_sla.sla_due_minore%TYPE;
-- numero di giorni di SLA2<=4 relativi al mese
sla2_maggiore dwh.mnp_dw_donor_sla.sla_due_maggiore%TYPE;
-- numero di giorni di SLA2>4 relativi al mese
sla0 NUMBER; -- numero di giorni di SLA0 totale
sla1 NUMBER; -- numero di giorni di SLA1 totale
sla2 NUMBER; -- numero di giorni di SLA2 totale
app_stato NUMBER; -- stato attuale della richiesta
app_data_presa_in_carico DATE; -- data di presa in carico
app_data_ricezione_richiesta DATE; -- data ricezione richiesta
app_data_validazione DATE; -- data di validazione
app_data_validazione_max DATE; -- data di validazione massima
app_data_espletamento DATE; -- data di espletamento
app_data_stato_finale DATE;
-- data in cui la richiesta ha terminato il processo
app_data_cut_over_calc DATE; -- data di cut over calcolata
bound NUMBER := 4;
-- Limite per la separazione dei giorni/ore di ritardo
sla1_mese_corrente NUMBER;
-- numero di giorni di SLA1 nel mese di riferimento
sla1_mesi_precedenti NUMBER;
-- numero di giorni di SLA1 dei mesi precedenti
sla2_mese_corrente NUMBER;
-- numero di giorni di SLA2 nel mese di riferimento
sla2_mesi_precedenti NUMBER;
-- numero di giorni di SLA2 dei mesi precedenti
var_stato_finale NUMBER;
-- variabile di appoggio per il codice dello sto finale
file_log UTL_FILE.file_type; -- file di log
dir_out_log VARCHAR2 (200);
line_log VARCHAR2 (200);
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta, stato, data_presa_in_carico,
data_ricezione_richiesta, data_validazione, data_validazione_max,
data_espletamento, data_stato_finale, data_cut_over_calc
FROM dwh.mnp_dw_donor_delta;
BEGIN
cod_errore := 0;
dir_out_log := 'SLA';
file_log := UTL_FILE.fopen (
dir_out_log,
'SLA_DONOR_'
|| TO_CHAR (SYSDATE, 'yyyyMMdd')
|| '.log',
'w'
);
UTL_FILE.put_line (
file_log,
TO_CHAR (SYSDATE, 'yyyyMMdd HH24:mi:ss')
|| ': INIZIO CALCOLO SLA DONOR'
);
UTL_FILE.fflush (file_log);
DELETE FROM dwh.mnp_dw_donor_sla
WHERE mese = mese_in AND anno = anno_in;
COMMIT;
-- Calcolo ultimo giorno lavorativo del mese
ultimo_giorno_mese := dwh.fun_ultimo_giorno_lavorativo (mese_in, anno_in);
-- Calcolo primo giorno lavorativo del mese
primo_giorno_mese := dwh.fun_primo_giorno_lavorativo (mese_in, anno_in);
OPEN cur_richiesta;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta INTO app_id_richiesta,
app_stato,
app_data_presa_in_carico,
app_data_ricezione_richiesta,
app_data_validazione,
app_data_validazione_max,
app_data_espletamento,
app_data_stato_finale,
app_data_cut_over_calc;
EXIT WHEN cur_richiesta%NOTFOUND;
-- Inizializzazione variabili
sla0_minore := 0;
sla0_maggiore := 0;
sla1_minore := 0;
sla1_maggiore := 0;
sla2_minore := 0;
sla2_maggiore := 0;
sla0 := 0;
sla1 := 0;
sla2 := 0;
sla1_mese_corrente := 0;
sla1_mesi_precedenti := 0;
sla2_mese_corrente := 0;
sla2_mesi_precedenti := 0;
-- Calcolo SLA0 totale
-- se la data di presa in carico h nulla lo sla non viene calcolato
IF app_data_presa_in_carico IS NULL
THEN
sla0 := 0;
ELSE
IF (TRUNC (app_data_presa_in_carico) <= ultimo_giorno_mese)
AND (TRUNC (app_data_presa_in_carico) >= primo_giorno_mese)
THEN
sla0 := dwh.fun_giorni_lavorativi (
app_data_presa_in_carico,
app_data_ricezione_richiesta
)
- 1;
ELSE
sla0 := 0;
END IF;
END IF;
BEGIN
SELECT DECODE (finale, 1, id_stato, 0, -1)
INTO var_stato_finale
FROM mnp.mnp_stato
WHERE id_stato = app_stato;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
var_stato_finale := -1;
END;
-- Calcolo SLA1 totale
IF (TRUNC (app_data_validazione_max) <= ultimo_giorno_mese)
AND ( app_data_validazione IS NULL
OR app_data_validazione >= primo_giorno_mese
)
THEN
IF app_data_validazione IS NULL
THEN
IF app_stato = var_stato_finale
THEN
app_data_validazione := app_data_stato_finale;
ELSE
app_data_validazione := FUN_GIORNI_PIU(ultimo_giorno_mese,1);
END IF;
END IF;
sla1 := dwh.fun_giorni_lavorativi (
app_data_validazione,
app_data_validazione_max
);
IF sla1 > 0
THEN
IF TRUNC (app_data_validazione_max) >= primo_giorno_mese
THEN
sla1_mese_corrente := sla1;
ELSE
sla1_mese_corrente :=
dwh.fun_giorni_lavorativi (
app_data_validazione,
primo_giorno_mese
);
END IF;
ELSE
sla1 := 0;
sla1_mese_corrente := 0;
END IF;
ELSE
sla1 := 0;
sla1_mese_corrente := 0;
END IF;
-- Calcolo SLA1 mesi precedenti
sla1_mesi_precedenti := sla1
- sla1_mese_corrente;
-- Verifico se gli SLA sono positivi
IF sla1 < 0
THEN
sla1 := 0;
END IF;
IF sla1_mese_corrente < 0
THEN
sla1_mese_corrente := 0;
END IF;
IF sla1_mesi_precedenti < 0
THEN
sla1_mesi_precedenti := 0;
END IF;
-- Calcolo SLA2 totale
IF (TRUNC (app_data_cut_over_calc) <= ultimo_giorno_mese)
AND ( app_data_espletamento IS NULL
OR app_data_espletamento >= primo_giorno_mese
)
THEN
IF app_data_espletamento IS NULL
THEN
IF app_stato = var_stato_finale
THEN
app_data_espletamento := app_data_stato_finale;
ELSE
app_data_espletamento := FUN_GIORNI_PIU(ultimo_giorno_mese,1);
END IF;
END IF;
sla2 := dwh.fun_giorni_lavorativi (
app_data_espletamento,
app_data_cut_over_calc
);
IF sla2 > 0
THEN
IF TRUNC (app_data_cut_over_calc) >= primo_giorno_mese
THEN
sla2_mese_corrente := sla2;
ELSE
sla2_mese_corrente :=
dwh.fun_giorni_lavorativi (
app_data_espletamento,
primo_giorno_mese
);
END IF;
ELSE
sla2 := 0;
sla2_mese_corrente := 0;
END IF;
ELSE
sla2 := 0;
sla2_mese_corrente := 0;
END IF;
-- Calcolo SLA2 mesi precedenti
sla2_mesi_precedenti := sla2
- sla2_mese_corrente;
-- Verifico se gli SLA sono positivi
IF sla2 < 0
THEN
sla2 := 0;
END IF;
IF sla2_mese_corrente < 0
THEN
sla2_mese_corrente := 0;
END IF;
IF sla2_mesi_precedenti < 0
THEN
sla2_mesi_precedenti := 0;
END IF;
-- Calcolo SLA0 relativo al mese di riferimento
IF sla0 > 0
THEN
IF sla0 <= bound
THEN
sla0_minore := sla0;
sla0_maggiore := 0;
ELSE
sla0_minore := bound;
sla0_maggiore := sla0
- bound;
END IF;
ELSE
-- se lo SLA totale h <= 0 gli SLA relativi al mese sono 0
sla0_minore := 0;
sla0_maggiore := 0;
END IF;
-- ************************ CALCOLO SLA1 SULLE DATE ****************************
IF sla1_mese_corrente = 0
THEN -- lo SLA1 del mese corrente h 0
sla1_minore := 0;
sla1_maggiore := 0;
ELSE -- lo SLA1 del mese corrente h positivo
IF sla1_mesi_precedenti >= bound
THEN
sla1_minore := 0;
sla1_maggiore := sla1_mese_corrente;
ELSE
IF sla1_mese_corrente >= bound
- sla1_mesi_precedenti
THEN
sla1_minore := bound
- sla1_mesi_precedenti;
sla1_maggiore := sla1
- bound;
ELSE
-- lo SLA1 del mese corrente h minore di 4 - SLA1 dei mesi precedenti
sla1_minore := sla1_mese_corrente;
sla1_maggiore := 0;
END IF;
END IF;
END IF;
-- ************************ FINE CALCOLO SLA1 SULLE DATE ****************************
-- ************************ CALCOLO SLA2 SULLE DATE ****************************
IF sla2_mese_corrente = 0
THEN -- lo SLA2 del mese corrente h 0
sla2_minore := 0;
sla2_maggiore := 0;
ELSE -- lo SLA2 del mese corrente h positivo
IF sla2_mesi_precedenti >= bound
THEN
sla2_minore := 0;
sla2_maggiore := sla2_mese_corrente;
ELSE
IF sla2_mese_corrente >= bound
- sla2_mesi_precedenti
THEN
sla2_minore := bound
- sla2_mesi_precedenti;
sla2_maggiore := sla2
- bound;
ELSE
-- lo SLA2 del mese corrente h minore di 4 - SLA2 dei mesi precedenti
sla2_minore := sla2_mese_corrente;
sla2_maggiore := 0;
END IF;
END IF;
END IF;
-- ************************ FINE CALCOLO SLA2 SULLE DATE ****************************
-- Se esiste almeno uno SLA nel mese di riferimento
IF sla0_minore > 0
OR sla0_maggiore > 0
OR sla1_minore > 0
OR sla1_maggiore > 0
OR sla2_minore > 0
OR sla2_maggiore > 0
THEN
-- Inserimento del record relativo al mese nella tabella degli SLA
INSERT INTO dwh.mnp_dw_donor_sla
(id_richiesta, mese, anno, sla_zero_minore,
sla_zero_maggiore, sla_uno_minore, sla_uno_maggiore,
sla_due_minore, sla_due_maggiore)
VALUES (app_id_richiesta, mese_in, anno_in, sla0_minore,
sla0_maggiore, sla1_minore, sla1_maggiore,
sla2_minore, sla2_maggiore);
COMMIT;
END IF;
END LOOP;
CLOSE cur_richiesta;
DELETE FROM dwh.mnp_dw_donor d
WHERE NOT EXISTS ( SELECT id_richiesta
FROM dwh.mnp_dw_donor_sla ds
WHERE ds.id_richiesta = d.id_richiesta);
COMMIT;
UTL_FILE.put_line (
file_log,
TO_CHAR (SYSDATE, 'yyyyMMdd HH24:mi:ss')
|| ': FINE CALCOLO SLA DONOR'
);
UTL_FILE.fflush (file_log);
UTL_FILE.fclose (file_log);
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ( 'Errore in CALCOLA_SLA_DONOR '
|| SQLERRM);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,395 @@
CREATE OR REPLACE PROCEDURE CALCOLA_SLA_DONOR_HOC (
mese_in IN NUMBER,
anno_in IN NUMBER,
cod_errore IN OUT NUMBER
)
IS
-- Purpose: Calcolo degli SLA Donor ad HOC
-- La procedura calcola gli SLA Donor ad HOC relativi al mese di riferimento per tutte
-- le richieste contenute nella tabella MNP_DW_DONOR_HOC_DELTA ed inserisce un record
-- con i valori caolcolati nella tabella MNP_DW_DONOR_HOC_SLA
-- MODIFICATION HISTORY
-- A.Parati 18/08/2004 Versione Iniziale
-- L.Marcucci 15/10/2004 Correzione errore calcolo SLA1 e SLA2
ultimo_giorno_mese DATE;
-- Ultimo giorno lavorativo del mese di riferiemnto
primo_giorno_mese DATE;
-- Primo giorno lavorativo del mese di riferimento
app_id_richiesta dwh.mnp_dw_donor_hoc_delta.id_richiesta%TYPE;
-- identificativo della richiesta di cui calcolare gli sla
sla0_minore dwh.mnp_dw_donor_hoc_sla.sla_zero_minore%TYPE;
-- numero di giorni di SLA0<=4 relativi al mese calcolato su SLA precedenti
sla0_maggiore dwh.mnp_dw_donor_hoc_sla.sla_zero_maggiore%TYPE;
-- numero di giorni di SLA0>4 relativi al mese calcolato su SLA precedenti
sla1_minore dwh.mnp_dw_donor_hoc_sla.sla_uno_minore%TYPE;
-- numero di giorni di SLA1<=4 relativi al mese
sla1_maggiore dwh.mnp_dw_donor_hoc_sla.sla_uno_maggiore%TYPE;
-- numero di giorni di SLA1>4 relativi al mese
sla2_minore dwh.mnp_dw_donor_hoc_sla.sla_due_minore%TYPE;
-- numero di giorni di SLA2<=4 relativi al mese
sla2_maggiore dwh.mnp_dw_donor_hoc_sla.sla_due_maggiore%TYPE;
-- numero di giorni di SLA2>4 relativi al mese
sla0 NUMBER; -- numero di giorni di SLA0 totale
sla1 NUMBER; -- numero di giorni di SLA1 totale
sla2 NUMBER; -- numero di giorni di SLA2 totale
app_stato NUMBER; -- stato attuale della richiesta
app_data_presa_in_carico DATE; -- data di presa in carico
app_data_ricezione_richiesta DATE; -- data ricezione richiesta
app_data_prima_validazione DATE; -- data di prima validazione
app_data_validazione_max DATE; -- data di validazione massima
app_data_espletamento DATE; -- data di espletamento
app_data_stato_finale DATE;
-- data in cui la richiesta ha terminato il processo
app_data_cut_over_calc DATE; -- data di cut over calcolata
bound NUMBER := 4;
-- Limite per la separazione dei giorni/ore di ritardo
sla1_mese_corrente NUMBER;
-- numero di giorni di SLA1 nel mese di riferimento
sla1_mesi_precedenti NUMBER;
-- numero di giorni di SLA1 dei mesi precedenti
sla2_mese_corrente NUMBER;
-- numero di giorni di SLA2 nel mese di riferimento
sla2_mesi_precedenti NUMBER;
-- numero di giorni di SLA2 dei mesi precedenti
var_stato_finale NUMBER;
-- variabile di appoggio per il codice dello sto finale
file_log UTL_FILE.file_type; -- file di log
dir_out_log VARCHAR2 (200);
line_log VARCHAR2 (200);
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta, stato, data_presa_in_carico,
data_ricezione_richiesta, data_prima_validazione,
data_validazione_max, data_espletamento, data_stato_finale,
data_cut_over_calc
FROM dwh.mnp_dw_donor_hoc_delta;
BEGIN
cod_errore := 0;
dir_out_log := 'SLA';
file_log := UTL_FILE.fopen (
dir_out_log,
'SLA_DONOR_HOC_'
|| TO_CHAR (SYSDATE, 'yyyyMMdd')
|| '.log',
'w'
);
UTL_FILE.put_line (
file_log,
TO_CHAR (SYSDATE, 'yyyyMMdd HH24:mi:ss')
|| ': INIZIO CALCOLO SLA DONOR HOC'
);
UTL_FILE.fflush (file_log);
DELETE FROM dwh.mnp_dw_donor_hoc_sla
WHERE mese = mese_in AND anno = anno_in;
COMMIT;
-- Calcolo ultimo giorno lavorativo del mese
ultimo_giorno_mese := dwh.fun_ultimo_giorno_lavorativo (mese_in, anno_in);
-- Calcolo primo giorno lavorativo del mese
primo_giorno_mese := dwh.fun_primo_giorno_lavorativo (mese_in, anno_in);
OPEN cur_richiesta;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta INTO app_id_richiesta,
app_stato,
app_data_presa_in_carico,
app_data_ricezione_richiesta,
app_data_prima_validazione,
app_data_validazione_max,
app_data_espletamento,
app_data_stato_finale,
app_data_cut_over_calc;
EXIT WHEN cur_richiesta%NOTFOUND;
-- Inizializzazione variabili
sla0_minore := 0;
sla0_maggiore := 0;
sla1_minore := 0;
sla1_maggiore := 0;
sla2_minore := 0;
sla2_maggiore := 0;
sla0 := 0;
sla1 := 0;
sla2 := 0;
sla1_mese_corrente := 0;
sla1_mesi_precedenti := 0;
sla2_mese_corrente := 0;
sla2_mesi_precedenti := 0;
-- Calcolo SLA0 totale
-- se la data di presa in carico h nulla lo sla non viene calcolato
IF app_data_presa_in_carico IS NULL
THEN
sla0 := 0;
ELSE
IF (TRUNC (app_data_presa_in_carico) <= ultimo_giorno_mese)
AND (TRUNC (app_data_presa_in_carico) >= primo_giorno_mese)
THEN
sla0 := dwh.fun_giorni_lavorativi (
app_data_presa_in_carico,
app_data_ricezione_richiesta
)
- 1;
ELSE
sla0 := 0;
END IF;
END IF;
BEGIN
SELECT DECODE (finale, 1, id_stato, 0, -1)
INTO var_stato_finale
FROM mnp.mnp_stato
WHERE id_stato = app_stato;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
var_stato_finale := -1;
END;
-- Calcolo SLA1 totale
IF (TRUNC (app_data_validazione_max) <= ultimo_giorno_mese)
AND ( app_data_prima_validazione IS NULL
OR app_data_prima_validazione >= primo_giorno_mese
)
THEN
IF app_data_prima_validazione IS NULL
THEN
IF app_stato = var_stato_finale
THEN
app_data_prima_validazione := app_data_stato_finale;
ELSE
app_data_prima_validazione := FUN_GIORNI_PIU(ultimo_giorno_mese,1);
END IF;
END IF;
sla1 := dwh.fun_giorni_lavorativi (
app_data_prima_validazione,
app_data_validazione_max
);
IF sla1 > 0
THEN
IF TRUNC (app_data_validazione_max) >= primo_giorno_mese
THEN
sla1_mese_corrente := sla1;
ELSE
sla1_mese_corrente :=
dwh.fun_giorni_lavorativi (
app_data_prima_validazione,
primo_giorno_mese
);
END IF;
ELSE
sla1 := 0;
sla1_mese_corrente := 0;
END IF;
ELSE
sla1 := 0;
sla1_mese_corrente := 0;
END IF;
-- Calcolo SLA1 mesi precedenti
sla1_mesi_precedenti := sla1
- sla1_mese_corrente;
-- Verifico se gli SLA sono positivi
IF sla1 < 0
THEN
sla1 := 0;
END IF;
IF sla1_mese_corrente < 0
THEN
sla1_mese_corrente := 0;
END IF;
IF sla1_mesi_precedenti < 0
THEN
sla1_mesi_precedenti := 0;
END IF;
-- Calcolo SLA2 totale
IF (TRUNC (app_data_cut_over_calc) <= ultimo_giorno_mese)
AND ( app_data_espletamento IS NULL
OR app_data_espletamento >= primo_giorno_mese
)
THEN
IF app_data_espletamento IS NULL
THEN
IF app_stato = var_stato_finale
THEN
app_data_espletamento := app_data_stato_finale;
ELSE
app_data_espletamento := FUN_GIORNI_PIU(ultimo_giorno_mese,1);
END IF;
END IF;
sla2 := dwh.fun_giorni_lavorativi (
app_data_espletamento,
app_data_cut_over_calc
);
IF sla2 > 0
THEN
IF TRUNC (app_data_cut_over_calc) >= primo_giorno_mese
THEN
sla2_mese_corrente := sla2;
ELSE
sla2_mese_corrente :=
dwh.fun_giorni_lavorativi (
app_data_espletamento,
primo_giorno_mese
);
END IF;
ELSE
sla2 := 0;
sla2_mese_corrente := 0;
END IF;
ELSE
sla2 := 0;
sla2_mese_corrente := 0;
END IF;
-- Calcolo SLA2 mesi precedenti
sla2_mesi_precedenti := sla2
- sla2_mese_corrente;
-- Verifico se gli SLA sono positivi
IF sla2 < 0
THEN
sla2 := 0;
END IF;
IF sla2_mese_corrente < 0
THEN
sla2_mese_corrente := 0;
END IF;
IF sla2_mesi_precedenti < 0
THEN
sla2_mesi_precedenti := 0;
END IF;
-- Calcolo SLA0 relativo al mese di riferimento
IF sla0 > 0
THEN
IF sla0 <= bound
THEN
sla0_minore := sla0;
sla0_maggiore := 0;
ELSE
sla0_minore := bound;
sla0_maggiore := sla0
- bound;
END IF;
ELSE
-- se lo SLA totale h <= 0 gli SLA relativi al mese sono 0
sla0_minore := 0;
sla0_maggiore := 0;
END IF;
-- ************************ CALCOLO SLA1 SULLE DATE ****************************
IF sla1_mese_corrente = 0
THEN -- lo SLA1 del mese corrente h 0
sla1_minore := 0;
sla1_maggiore := 0;
ELSE -- lo SLA1 del mese corrente h positivo
IF sla1_mesi_precedenti >= bound
THEN
sla1_minore := 0;
sla1_maggiore := sla1_mese_corrente;
ELSE
IF sla1_mese_corrente >= bound
- sla1_mesi_precedenti
THEN
sla1_minore := bound
- sla1_mesi_precedenti;
sla1_maggiore := sla1
- bound;
ELSE
-- lo SLA1 del mese corrente h minore di 4 - SLA1 dei mesi precedenti
sla1_minore := sla1_mese_corrente;
sla1_maggiore := 0;
END IF;
END IF;
END IF;
-- ************************ FINE CALCOLO SLA1 SULLE DATE ****************************
-- ************************ CALCOLO SLA2 SULLE DATE ****************************
IF sla2_mese_corrente = 0
THEN -- lo SLA2 del mese corrente h 0
sla2_minore := 0;
sla2_maggiore := 0;
ELSE -- lo SLA2 del mese corrente h positivo
IF sla2_mesi_precedenti >= bound
THEN
sla2_minore := 0;
sla2_maggiore := sla2_mese_corrente;
ELSE
IF sla2_mese_corrente >= bound
- sla2_mesi_precedenti
THEN
sla2_minore := bound
- sla2_mesi_precedenti;
sla2_maggiore := sla2
- bound;
ELSE
-- lo SLA2 del mese corrente h minore di 4 - SLA2 dei mesi precedenti
sla2_minore := sla2_mese_corrente;
sla2_maggiore := 0;
END IF;
END IF;
END IF;
-- ************************ FINE CALCOLO SLA2 SULLE DATE ****************************
-- Se esiste almeno uno SLA nel mese di riferimento
IF sla0_minore > 0
OR sla0_maggiore > 0
OR sla1_minore > 0
OR sla1_maggiore > 0
OR sla2_minore > 0
OR sla2_maggiore > 0
THEN
-- Inserimento del record relativo al mese nella tabella degli SLA
INSERT INTO dwh.mnp_dw_donor_hoc_sla
(id_richiesta, mese, anno, sla_zero_minore,
sla_zero_maggiore, sla_uno_minore, sla_uno_maggiore,
sla_due_minore, sla_due_maggiore)
VALUES (app_id_richiesta, mese_in, anno_in, sla0_minore,
sla0_maggiore, sla1_minore, sla1_maggiore,
sla2_minore, sla2_maggiore);
COMMIT;
END IF;
END LOOP;
CLOSE cur_richiesta;
DELETE FROM dwh.mnp_dw_donor_hoc d
WHERE NOT EXISTS ( SELECT id_richiesta
FROM dwh.mnp_dw_donor_hoc_sla ds
WHERE ds.id_richiesta = d.id_richiesta);
COMMIT;
UTL_FILE.put_line (
file_log,
TO_CHAR (SYSDATE, 'yyyyMMdd HH24:mi:ss')
|| ': FINE CALCOLO SLA DONOR HOC '
);
UTL_FILE.fflush (file_log);
UTL_FILE.fclose (file_log);
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ( 'Errore in CALCOLA_SLA_DONOR_HOC '
|| SQLERRM);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,156 @@
CREATE OR REPLACE PROCEDURE CALCOLA_SLA_DONOR_HOC_ONLINE (cod_errore IN OUT NUMBER)
IS
-- Purpose: Calcolo degli SLA Donor ad HOC
-- La procedura calcola gli SLA Donor ad HOC per tutte
-- le richieste contenute nella tabella MNP_DW_DONOR_HOC_ONLINE
-- MODIFICATION HISTORY
app_id_richiesta dwh.mnp_dw_donor_hoc_delta.id_richiesta%TYPE;
-- identificativo della richiesta di cui calcolare gli sla
sla0 NUMBER; -- numero di giorni di SLA0 totale
sla1 NUMBER; -- numero di giorni di SLA1 totale
sla2 NUMBER; -- numero di giorni di SLA2 totale
app_stato NUMBER; -- stato attuale della richiesta
app_data_presa_in_carico DATE; -- data di presa in carico
app_data_ricezione_richiesta DATE; -- data ricezione richiesta
app_data_prima_validazione DATE; -- data di prima validazione
app_data_validazione_max DATE; -- data di validazione massima
app_data_espletamento DATE; -- data di espletamento
app_data_stato_finale DATE;
-- data in cui la richiesta ha terminato il processo
app_data_cut_over_calc DATE; -- data di cut over calcolata
-- numero di giorni di SLA2 dei mesi precedenti
var_stato_finale NUMBER;
-- variabile di appoggio per il codice dello sto finale
file_log UTL_FILE.file_type; -- file di log
dir_out_log VARCHAR2 (200);
line_log VARCHAR2 (200);
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta, stato, data_presa_in_carico,
data_ricezione_richiesta, data_prima_validazione,
data_validazione_max, data_espletamento, data_stato_finale,
data_cut_over_calc
FROM dwh.mnp_dw_donor_hoc_online;
BEGIN
cod_errore := 0;
dir_out_log := 'SLA';
file_log :=
UTL_FILE.fopen (dir_out_log,
'SLA_DONOR_HOC_ONLINE'
|| TO_CHAR (SYSDATE, 'yyyyMMdd')
|| '.log',
'w'
);
UTL_FILE.put_line (file_log,
TO_CHAR (SYSDATE, 'yyyyMMdd HH24:mi:ss')
|| ': INIZIO CALCOLO SLA DONOR HOC ONLINE '
);
UTL_FILE.fflush (file_log);
OPEN cur_richiesta;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta
INTO app_id_richiesta, app_stato, app_data_presa_in_carico,
app_data_ricezione_richiesta, app_data_prima_validazione,
app_data_validazione_max, app_data_espletamento,
app_data_stato_finale, app_data_cut_over_calc;
EXIT WHEN cur_richiesta%NOTFOUND;
-- Inizializzazione variabili
sla0 := 0;
sla1 := 0;
sla2 := 0;
-- Calcolo SLA0 totale
-- se la data di presa in carico h nulla lo sla non viene calcolato
IF app_data_presa_in_carico IS NULL
THEN
sla0 := 0;
ELSE
sla0 :=
dwh.fun_giorni_lavorativi (app_data_presa_in_carico,
app_data_ricezione_richiesta
)
- 1;
END IF;
BEGIN
SELECT DECODE (finale, 1, id_stato, 0, -1)
INTO var_stato_finale
FROM mnp.mnp_stato
WHERE id_stato = app_stato;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
var_stato_finale := -1;
END;
-- Calcolo SLA1 totale
IF app_data_prima_validazione IS NULL
THEN
IF app_stato = var_stato_finale
THEN
app_data_prima_validazione := app_data_stato_finale;
ELSE
app_data_prima_validazione := TRUNC (SYSDATE);
END IF;
END IF;
sla1 :=
dwh.fun_giorni_lavorativi (app_data_prima_validazione,
app_data_validazione_max
);
-- Calcolo SLA2 totale
IF app_data_espletamento IS NULL
THEN
IF app_stato = var_stato_finale
THEN
app_data_espletamento := app_data_stato_finale;
ELSE
app_data_espletamento := TRUNC (SYSDATE);
END IF;
END IF;
sla2 :=
dwh.fun_giorni_lavorativi (app_data_espletamento,
app_data_cut_over_calc
);
-- Verifico se gli SLA sono positivi
IF sla2 < 0
THEN
sla2 := 0;
END IF;
UPDATE dwh.mnp_dw_donor_hoc_online d
SET d.sla_zero = sla0,
d.sla_uno = sla1,
d.sla_due = sla2
WHERE d.id_richiesta = app_id_richiesta;
COMMIT;
END LOOP;
CLOSE cur_richiesta;
UTL_FILE.put_line (file_log,
TO_CHAR (SYSDATE, 'yyyyMMdd HH24:mi:ss')
|| ': FINE CALCOLO SLA DONOR HOC ONLINE '
);
UTL_FILE.fflush (file_log);
UTL_FILE.fclose (file_log);
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ( 'Errore in CALCOLA_SLA_DONOR_HOC_ONLINE '
|| SQLERRM
);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,161 @@
CREATE OR REPLACE PROCEDURE CALCOLA_SLA_DONOR_ONLINE (cod_errore IN OUT NUMBER)
IS
-- Purpose: Calcolo degli SLA Donor ONLINE
-- La procedura calcola gli SLA Donor relativi al mese di riferimento per tutte
-- le richieste contenute nella tabella MNP_DW_DONOR_ONLINE ed aggiorna i valori degli SLA0, SLA1, SLA2
-- MODIFICATION HISTORY
app_id_richiesta dwh.mnp_dw_donor_online.id_richiesta%TYPE;
-- identificativo della richiesta di cui calcolare gli sla
sla0 NUMBER; -- numero di giorni di SLA0 totale
sla1 NUMBER; -- numero di giorni di SLA1 totale
sla2 NUMBER; -- numero di giorni di SLA2 totale
app_stato NUMBER; -- stato attuale della richiesta
app_data_presa_in_carico DATE; -- data di presa in carico
app_data_ricezione_richiesta DATE; -- data ricezione richiesta
app_data_validazione DATE; -- data di validazione
app_data_validazione_max DATE; -- data di validazione massima
app_data_espletamento DATE; -- data di espletamento
app_data_stato_finale DATE;
-- data in cui la richiesta ha terminato il processo
app_data_cut_over_calc DATE; -- data di cut over calcolata
var_stato_finale NUMBER;
-- variabile di appoggio per il codice dello sto finale
file_log UTL_FILE.file_type; -- file di log
dir_out_log VARCHAR2 (200);
line_log VARCHAR2 (200);
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta, stato, data_presa_in_carico,
data_ricezione_richiesta, data_validazione,
data_validazione_max, data_espletamento, data_stato_finale,
data_cut_over_calc
FROM dwh.mnp_dw_donor_online;
BEGIN
cod_errore := 0;
dir_out_log := 'SLA';
file_log :=
UTL_FILE.fopen (dir_out_log,
'SLA_DONOR_ONLINE'
|| TO_CHAR (SYSDATE, 'yyyyMMdd')
|| '.log',
'w'
);
UTL_FILE.put_line (file_log,
TO_CHAR (SYSDATE, 'yyyyMMdd HH24:mi:ss')
|| ': INIZIO CALCOLO SLA DONOR ONLINE'
);
UTL_FILE.fflush (file_log);
OPEN cur_richiesta;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta
INTO app_id_richiesta, app_stato, app_data_presa_in_carico,
app_data_ricezione_richiesta, app_data_validazione,
app_data_validazione_max, app_data_espletamento,
app_data_stato_finale, app_data_cut_over_calc;
EXIT WHEN cur_richiesta%NOTFOUND;
-- Inizializzazione variabili
sla0 := 0;
sla1 := 0;
sla2 := 0;
-- Calcolo SLA0 totale
-- se la data di presa in carico h nulla lo sla non viene calcolato
IF app_data_presa_in_carico IS NULL
THEN
sla0 := 0;
ELSE
sla0 :=
dwh.fun_giorni_lavorativi (app_data_presa_in_carico,
app_data_ricezione_richiesta
)
- 1;
END IF;
BEGIN
SELECT DECODE (finale, 1, id_stato, 0, -1)
INTO var_stato_finale
FROM mnp.mnp_stato
WHERE id_stato = app_stato;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
var_stato_finale := -1;
END;
-- Calcolo SLA1 totale
IF app_data_validazione IS NULL
THEN
IF app_stato = var_stato_finale
THEN
app_data_validazione := app_data_stato_finale;
ELSE
app_data_validazione := TRUNC (SYSDATE);
END IF;
END IF;
sla1 :=
dwh.fun_giorni_lavorativi (app_data_validazione,
app_data_validazione_max
);
-- Verifico se gli SLA sono positivi
IF sla1 < 0
THEN
sla1 := 0;
END IF;
-- Calcolo SLA2 totale
IF app_data_espletamento IS NULL
THEN
IF app_stato = var_stato_finale
THEN
app_data_espletamento := app_data_stato_finale;
ELSE
app_data_espletamento := TRUNC (SYSDATE);
END IF;
END IF;
sla2 :=
dwh.fun_giorni_lavorativi (app_data_espletamento,
app_data_cut_over_calc
);
-- Verifico se gli SLA sono positivi
IF sla2 < 0
THEN
sla2 := 0;
END IF;
-- ************************ FINE CALCOLO SLA2 SULLE DATE ****************************
UPDATE dwh.mnp_dw_donor_online d
SET d.sla_zero = sla0,
d.sla_uno = sla1,
d.sla_due = sla2
WHERE d.id_richiesta = app_id_richiesta;
COMMIT;
END LOOP;
CLOSE cur_richiesta;
COMMIT;
UTL_FILE.put_line (file_log,
TO_CHAR (SYSDATE, 'yyyyMMdd HH24:mi:ss')
|| ': FINE CALCOLO SLA DONOR'
);
UTL_FILE.fflush (file_log);
UTL_FILE.fclose (file_log);
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in CALCOLA_SLA_DONOR_ONLINE ' || SQLERRM);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,581 @@
CREATE OR REPLACE PROCEDURE CALCOLA_SLA_RECIPIENT (
mese_in IN NUMBER,
anno_in IN NUMBER,
cod_errore IN OUT NUMBER
)
IS
-- Purpose: Calcolo degli SLA Recipient
-- La procedura calcola gli SLA Recipient relativi al mese di riferimento per tutte
-- le richieste contenute nella tabella MNP_DW_REC_DELTA ed inserisce un record
-- con i valori caolcolati nella tabella MNP_DW_REC_SLA
-- MODIFICATION HISTORY
-- A.Parati 15/07/2004 Versione Iniziale
-- A.Parati 18/08/2004 Modifica al calcolo degli SLA
-- L.Marcucci 15/10/2004 Modifica al calcolo degli SLA1 e SLA2
-- Ultimo giorno lavorativo del mese di riferiemnto
ultimo_giorno_mese DATE;
-- Primo giorno lavorativo del mese di riferimento
primo_giorno_mese DATE;
-- identificativo della richiesta di cui calcolare gli sla
app_id_richiesta dwh.mnp_dw_rec_delta.id_richiesta%TYPE;
-- numero di giorni di SLA0<=4 relativi al mese
sla0_minore dwh.mnp_dw_rec_sla.sla_zero_minore%TYPE;
-- numero di giorni di SLA0>4 relativi al mese
sla0_maggiore dwh.mnp_dw_rec_sla.sla_zero_maggiore%TYPE;
-- numero di giorni di SLA1<=4 relativi al mese
sla1_minore dwh.mnp_dw_rec_sla.sla_uno_minore%TYPE;
-- numero di giorni di SLA1>4 relativi al mese
sla1_maggiore dwh.mnp_dw_rec_sla.sla_uno_maggiore%TYPE;
-- numero di giorni di SLA2<=4 relativi al mese
sla2_minore dwh.mnp_dw_rec_sla.sla_due_minore%TYPE;
-- numero di giorni di SLA2>4 relativi al mese
sla2_maggiore dwh.mnp_dw_rec_sla.sla_due_maggiore%TYPE;
-- numero di giorni di SLA3<=4 relativi al mese
sla3_minore dwh.mnp_dw_rec_sla_terzeparti.sla_tre_minore%TYPE;
-- numero di giorni di SLA3>4 relativi al mese
sla3_maggiore dwh.mnp_dw_rec_sla_terzeparti.sla_tre_maggiore%TYPE;
sla0 NUMBER; -- numero di giorni di SLA0 totale
sla1 NUMBER; -- numero di giorni di SLA1 totale
sla2 NUMBER; -- numero di giorni di SLA2 totale
sla3 NUMBER; -- numero di giorni di SLA3 totale
app_stato NUMBER; -- stato attuale della richiesta
app_data_stato_finale DATE; -- data di transizione nello stato
app_data_presa_in_carico DATE; -- data di presa in carico
data_presa_in_carico_presunta DATE; -- data di presa in carico presunta
app_data_invio_aom DATE;
-- data di invio del file XML di attivazione
app_data_validazione DATE; -- data di validazione
data_validazione_presunta DATE; -- data di validazione presunta
app_data_esple_donating DATE; -- data di espletamento del donating
data_esple_donating_presunta DATE;
-- data di espletamento del donating presunta
app_data_cut_over_aom DATE;
-- data di cut over dell'AOM donating
app_data_config_teorica DATE;
-- data di invio del file XML di porting alla Terza Parte
app_data_config_effettiva DATE;
-- data di ricezione del file XML di espletamento dalla Terza Parte
app_aom_tp VARCHAR2 (4); -- Operatore terza parte
data_config_presunta DATE; -- data di configurazione presunta
bound NUMBER := 4;
dco_calc_aom_ora DATE;
dco_conf_teorica_19 DATE;
-- Identificativo della richiesta sulla tabella delta delle terze parti
app_id_richiesta_tp dwh.mnp_dw_rec_terzeparti_delta.id_richiesta%TYPE;
sla1_mese_corrente NUMBER;
-- numero di giorni di SLA1 nel mese di riferimento
sla1_mesi_precedenti NUMBER;
-- numero di giorni di SLA1 dei mesi precedenti
sla2_mese_corrente NUMBER;
-- numero di giorni di SLA2 nel mese di riferimento
sla2_mesi_precedenti NUMBER;
-- numero di giorni di SLA2 dei mesi precedenti
sla3_mese_corrente NUMBER;
-- numero di giorni di SLA3 nel mese di riferimento
sla3_mesi_precedenti NUMBER;
-- numero di giorni di SLA3 dei mesi precedenti
var_stato_finale NUMBER;
-- variabile di appoggio per il codice dello sto finale
file_log UTL_FILE.file_type; -- file di log
dir_out_log VARCHAR2 (200);
line_log VARCHAR2 (200);
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta, stato, data_stato_finale, data_presa_in_carico,
data_invio_ad_aom, data_validazione, data_espletamento_donating,
data_cut_over_aom
FROM dwh.mnp_dw_rec_delta;
-- Cursore per le terze parti di cui calcolare gli SLA3
CURSOR cur_terzaparte (var_richiesta IN VARCHAR2)
IS
SELECT id_richiesta, aom_terze_parti, data_configurazione_teorica,
data_configurazione_effettiva
FROM dwh.mnp_dw_rec_terzeparti_delta
WHERE id_richiesta = var_richiesta;
BEGIN
cod_errore := 0;
dir_out_log := 'SLA';
file_log := UTL_FILE.fopen (
dir_out_log,
'SLA_RECIPIENT_'
|| TO_CHAR (SYSDATE, 'yyyyMMdd')
|| '.log',
'w'
);
UTL_FILE.put_line (
file_log,
TO_CHAR (SYSDATE, 'yyyyMMdd HH24:mi:ss')
|| ': INIZIO CALCOLO SLA RECIPIENT'
);
UTL_FILE.fflush (file_log);
DELETE FROM dwh.mnp_dw_rec_sla
WHERE mese = mese_in AND anno = anno_in;
DELETE FROM dwh.mnp_dw_rec_sla_terzeparti
WHERE mese = mese_in AND anno = anno_in;
COMMIT;
-- Calcolo ultimo giorno lavorativo del mese
ultimo_giorno_mese := dwh.fun_ultimo_giorno_lavorativo (mese_in, anno_in);
-- Calcolo primo giorno lavorativo del mese
primo_giorno_mese := dwh.fun_primo_giorno_lavorativo (mese_in, anno_in);
OPEN cur_richiesta;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta INTO app_id_richiesta,
app_stato,
app_data_stato_finale,
app_data_presa_in_carico,
app_data_invio_aom,
app_data_validazione,
app_data_esple_donating,
app_data_cut_over_aom;
EXIT WHEN cur_richiesta%NOTFOUND;
-- Inizializzazione variabili
sla0_minore := 0;
sla0_maggiore := 0;
sla1_minore := 0;
sla1_maggiore := 0;
sla2_minore := 0;
sla2_maggiore := 0;
sla0 := 0;
sla1 := 0;
sla2 := 0;
sla1_mese_corrente := 0;
sla1_mesi_precedenti := 0;
sla2_mese_corrente := 0;
sla2_mesi_precedenti := 0;
-- Calcolo le date presunte
IF app_data_invio_aom IS NOT NULL
THEN
data_presa_in_carico_presunta :=
dwh.fun_giorni_piu (app_data_invio_aom, 1);
data_validazione_presunta :=
dwh.fun_giorni_piu (app_data_invio_aom, 3);
data_esple_donating_presunta :=
dwh.fun_giorni_piu (app_data_invio_aom, 6);
-- Calcolo SLA0 totale
IF app_data_presa_in_carico IS NULL
THEN
sla0 := 0;
ELSE
IF (TRUNC (app_data_presa_in_carico) <= ultimo_giorno_mese)
AND (TRUNC (app_data_presa_in_carico) >= primo_giorno_mese)
THEN
sla0 :=
dwh.fun_giorni_lavorativi (
app_data_presa_in_carico,
data_presa_in_carico_presunta
);
ELSE
sla0 := 0;
END IF;
END IF;
BEGIN
SELECT DECODE (finale, 1, id_stato, 0, -1)
INTO var_stato_finale
FROM mnp.mnp_stato_rec
WHERE id_stato = app_stato;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
var_stato_finale := -1;
END;
-- Calcolo SLA1 totale e corrente
IF (TRUNC (data_validazione_presunta) <= ultimo_giorno_mese)
AND ( app_data_validazione IS NULL
OR app_data_validazione >= primo_giorno_mese
)
THEN
IF app_data_validazione IS NULL
THEN
IF app_stato = var_stato_finale
THEN
app_data_validazione := app_data_stato_finale;
ELSE
app_data_validazione := FUN_GIORNI_PIU(ultimo_giorno_mese,1);
END IF;
END IF;
sla1 := dwh.fun_giorni_lavorativi (
app_data_validazione,
data_validazione_presunta
);
IF sla1 > 0
THEN
IF TRUNC (data_validazione_presunta) >= primo_giorno_mese
THEN
sla1_mese_corrente := sla1;
ELSE
sla1_mese_corrente :=
dwh.fun_giorni_lavorativi (
app_data_validazione,
primo_giorno_mese
);
END IF;
ELSE
sla1 := 0;
sla1_mese_corrente := 0;
END IF;
ELSE
sla1 := 0;
sla1_mese_corrente := 0;
END IF;
-- Calcolo SLA1 mesi precedenti
sla1_mesi_precedenti := sla1
- sla1_mese_corrente;
-- Verifico se gli SLA1 sono positivi
IF sla1 < 0
THEN
sla1 := 0;
END IF;
IF sla1_mese_corrente < 0
THEN
sla1_mese_corrente := 0;
END IF;
IF sla1_mesi_precedenti < 0
THEN
sla1_mesi_precedenti := 0;
END IF;
-- Calcolo SLA2 totale e corrente
IF (TRUNC (data_esple_donating_presunta) <= ultimo_giorno_mese)
AND ( app_data_esple_donating IS NULL
OR app_data_esple_donating >= primo_giorno_mese
)
THEN
IF app_data_esple_donating IS NULL
THEN
IF app_stato = var_stato_finale
THEN
app_data_esple_donating := app_data_stato_finale;
ELSE
app_data_esple_donating := FUN_GIORNI_PIU(ultimo_giorno_mese,1);
END IF;
END IF;
sla2 := dwh.fun_giorni_lavorativi (
app_data_esple_donating,
data_esple_donating_presunta
);
IF sla2 > 0
THEN
IF TRUNC (data_esple_donating_presunta) >= primo_giorno_mese
THEN
sla2_mese_corrente := sla2;
ELSE
sla2_mese_corrente :=
dwh.fun_giorni_lavorativi (
app_data_esple_donating,
primo_giorno_mese
);
END IF;
ELSE
sla2 := 0;
sla2_mese_corrente := 0;
END IF;
ELSE
sla2 := 0;
sla2_mese_corrente := 0;
END IF;
-- Calcolo SLA2 mesi precedenti
sla2_mesi_precedenti := sla2
- sla2_mese_corrente;
-- Verifico se gli SLA2 sono positivi
IF sla2 < 0
THEN
sla2 := 0;
END IF;
IF sla2_mese_corrente < 0
THEN
sla2_mese_corrente := 0;
END IF;
IF sla2_mesi_precedenti < 0
THEN
sla2_mesi_precedenti := 0;
END IF;
-- Calcolo SLA0 relativo al mese di riferimento
IF sla0 > 0
THEN
IF sla0 <= bound
THEN
sla0_minore := sla0;
sla0_maggiore := 0;
ELSE
sla0_minore := bound;
sla0_maggiore := sla0
- bound;
END IF;
ELSE
-- se lo SLA totale h <= 0 gli SLA relativi al mese sono 0
sla0_minore := 0;
sla0_maggiore := 0;
END IF;
-- Calcolo SLA1 relativo al mese di riferimento
IF sla1_mese_corrente = 0
THEN
sla1_minore := 0;
sla1_maggiore := 0;
ELSE -- lo SLA1 del mese corrente h positivo
IF sla1_mesi_precedenti >= bound
THEN
sla1_minore := 0;
sla1_maggiore := sla1_mese_corrente;
ELSE
IF sla1_mese_corrente >= bound
- sla1_mesi_precedenti
THEN
sla1_minore := bound
- sla1_mesi_precedenti;
sla1_maggiore := sla1
- bound;
ELSE
-- lo SLA1 del mese corrente h minore di 4 - SLA1 dei mesi precedenti
sla1_minore := sla1_mese_corrente;
sla1_maggiore := 0;
END IF;
END IF;
END IF;
-- Calcolo SLA2 relativo al mese di riferimento
IF sla2_mese_corrente = 0
THEN
sla2_minore := 0;
sla2_maggiore := 0;
ELSE -- lo SLA2 del mese corrente h positivo
IF sla2_mesi_precedenti >= bound
THEN
sla2_minore := 0;
sla2_maggiore := sla2_mese_corrente;
ELSE
IF sla2_mese_corrente >= bound
- sla2_mesi_precedenti
THEN
sla2_minore := bound
- sla2_mesi_precedenti;
sla2_maggiore := sla2
- bound;
ELSE
-- lo SLA2 del mese corrente h minore di 4 - SLA2 dei mesi precedenti
sla2_minore := sla2_mese_corrente;
sla2_maggiore := 0;
END IF;
END IF;
END IF;
-- Se esiste almeno uno SLA nel mese di riferimento
IF sla0_minore > 0
OR sla0_maggiore > 0
OR sla1_minore > 0
OR sla1_maggiore > 0
OR sla2_minore > 0
OR sla2_maggiore > 0
THEN
-- Inserimento del record relativo al mese nella tabella degli SLA
INSERT INTO dwh.mnp_dw_rec_sla
(id_richiesta, mese, anno, sla_zero_minore,
sla_zero_maggiore, sla_uno_minore, sla_uno_maggiore,
sla_due_minore, sla_due_maggiore)
VALUES (app_id_richiesta, mese_in, anno_in, sla0_minore,
sla0_maggiore, sla1_minore, sla1_maggiore,
sla2_minore, sla2_maggiore);
END IF;
OPEN cur_terzaparte (app_id_richiesta);
-- Per ogni richiesta di cui devo calcolare gli SLA sulle Terze Parti
LOOP
FETCH cur_terzaparte INTO app_id_richiesta_tp,
app_aom_tp,
app_data_config_teorica,
app_data_config_effettiva;
EXIT WHEN cur_terzaparte%NOTFOUND;
-- Inizializzazione variabili
sla3_minore := 0;
sla3_maggiore := 0;
sla3 := 0;
sla3_mese_corrente := 0;
sla3_mesi_precedenti := 0;
IF app_data_config_teorica IS NOT NULL
THEN
-- Data cut over contenuta nel file XML di Porting con l'ora impostata alle 08:00
dco_calc_aom_ora := app_data_cut_over_aom
+ 8 / 24;
-- Data di invio del file XML di Porting alla Terza Parte con l'ora impostata alle 19:00
dco_conf_teorica_19 :=
TRUNC (app_data_config_teorica)
+ 19 / 24;
IF app_data_config_teorica <=
dwh.fun_meno_ore_lavorative (dco_calc_aom_ora, 39)
THEN
data_config_presunta :=
dwh.fun_piu_ore_lavorative (dco_calc_aom_ora, 2);
ELSE
data_config_presunta :=
dwh.fun_piu_ore_lavorative (dco_conf_teorica_19, 39);
END IF;
-- Calcolo SLA3 totale
IF (TRUNC (data_config_presunta) <= ultimo_giorno_mese)
AND ( app_data_config_effettiva IS NULL
OR app_data_config_effettiva >= primo_giorno_mese
)
THEN
IF app_data_config_effettiva IS NULL
THEN
IF app_stato = var_stato_finale
THEN
app_data_config_effettiva := app_data_stato_finale;
ELSE
app_data_config_effettiva :=
dwh.fun_giorni_piu (ultimo_giorno_mese, 1);
END IF;
END IF;
sla3 := dwh.fun_ore_lavorative (
app_data_config_effettiva,
data_config_presunta
);
IF TRUNC (data_config_presunta) >= primo_giorno_mese
THEN
sla3_mese_corrente := sla3;
ELSE
sla3_mese_corrente :=
dwh.fun_ore_lavorative (
app_data_config_effettiva,
primo_giorno_mese
);
END IF;
ELSE
sla3 := 0;
sla3_mese_corrente := 0;
END IF;
-- Calcolo SLA1 mesi precedenti
sla3_mesi_precedenti := sla3
- sla3_mese_corrente;
-- Verifico se gli SLA sono positivi
IF sla3 < 0
THEN
sla3 := 0;
END IF;
IF sla3_mese_corrente < 0
THEN
sla3_mese_corrente := 0;
END IF;
IF sla3_mesi_precedenti < 0
THEN
sla3_mesi_precedenti := 0;
END IF;
-- Calcolo SLA3 relativo al mese di riferimento
IF sla3_mese_corrente = 0
THEN -- lo SLA3 del mese corrente h 0
sla3_minore := 0;
sla3_maggiore := 0;
ELSE -- lo SLA3 del mese corrente h positivo
IF sla3_mesi_precedenti >= bound
THEN
sla3_minore := 0;
sla3_maggiore := sla3_mese_corrente;
ELSE
IF sla3_mese_corrente >= bound
- sla3_mesi_precedenti
THEN
sla3_minore := bound
- sla3_mesi_precedenti;
sla3_maggiore := sla3
- bound;
ELSE
-- lo SLA3 del mese corrente h minore di 4 - SLA3 dei mesi precedenti
sla3_minore := sla3_mese_corrente;
sla3_maggiore := 0;
END IF;
END IF;
END IF;
-- Se esiste almeno uno SLA nel mese di riferimento
IF sla3_minore > 0
OR sla3_maggiore > 0
THEN
-- Inserimento del record relativo al mese nella tabella degli SLA
INSERT INTO dwh.mnp_dw_rec_sla_terzeparti
(id_richiesta, aom_terze_parti, mese,
anno, sla_tre_minore, sla_tre_maggiore)
VALUES (app_id_richiesta_tp, app_aom_tp, mese_in,
anno_in, sla3_minore, sla3_maggiore);
END IF;
END IF;
END LOOP; -- cur_terzaparte
CLOSE cur_terzaparte;
END IF; -- data_invio_aom non nulla
COMMIT;
END LOOP; -- cur_richiesta
CLOSE cur_richiesta;
DELETE FROM dwh.mnp_dw_rec_terzeparti d
WHERE NOT EXISTS ( SELECT id_richiesta
FROM dwh.mnp_dw_rec_sla ds
WHERE ds.id_richiesta = d.id_richiesta)
AND NOT EXISTS ( SELECT id_richiesta
FROM dwh.mnp_dw_rec_sla_terzeparti ds
WHERE ds.id_richiesta = d.id_richiesta);
COMMIT;
DELETE FROM dwh.mnp_dw_rec d
WHERE NOT EXISTS ( SELECT id_richiesta
FROM dwh.mnp_dw_rec_sla ds
WHERE ds.id_richiesta = d.id_richiesta)
AND NOT EXISTS ( SELECT id_richiesta
FROM dwh.mnp_dw_rec_sla_terzeparti ds
WHERE ds.id_richiesta = d.id_richiesta);
COMMIT;
UTL_FILE.put_line (
file_log,
TO_CHAR (SYSDATE, 'yyyyMMdd HH24:mi:ss')
|| ': FINE CALCOLO SLA RECIPIENT'
);
UTL_FILE.fflush (file_log);
UTL_FILE.fclose (file_log);
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ( 'Errore in CALCOLA_SLA_RECIPIENT '
|| SQLERRM);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,583 @@
CREATE OR REPLACE PROCEDURE CALCOLA_SLA_RECIPIENT_HOC (
mese_in IN NUMBER,
anno_in IN NUMBER,
cod_errore IN OUT NUMBER
)
IS
-- Purpose: Calcolo degli SLA Recipient ad HOC
-- La procedura calcola gli SLA Recipient relativi al mese di riferimento per tutte
-- le richieste contenute nella tabella MNP_DW_REC_HOC_DELTA ed inserisce un record
-- con i valori caolcolati nella tabella MNP_DW_REC_HOC_SLA
-- MODIFICATION HISTORY
-- A.Parati 15/07/2004 Versione Iniziale
-- A.Parati 19/08/2004 Modifica al calcolo degli SLA
-- A.Parati 15/10/2004 Modifica al calcolo degli SLA1 e SLA2
ultimo_giorno_mese DATE;
-- Ultimo giorno lavorativo del mese di riferiemnto
primo_giorno_mese DATE;
-- Primo giorno lavorativo del mese di riferimento
app_id_richiesta dwh.mnp_dw_rec_hoc_delta.id_richiesta%TYPE;
-- identificativo della richiesta di cui calcolare gli sla
sla0_minore dwh.mnp_dw_rec_hoc_sla.sla_zero_minore%TYPE;
-- numero di giorni di SLA0<=4 relativi al mese
sla0_maggiore dwh.mnp_dw_rec_hoc_sla.sla_zero_maggiore%TYPE;
-- numero di giorni di SLA0>4 relativi al mese
sla1_minore dwh.mnp_dw_rec_hoc_sla.sla_uno_minore%TYPE;
-- numero di giorni di SLA1<=4 relativi al mese
sla1_maggiore dwh.mnp_dw_rec_hoc_sla.sla_uno_maggiore%TYPE;
-- numero di giorni di SLA1>4 relativi al mese
sla2_minore dwh.mnp_dw_rec_hoc_sla.sla_due_minore%TYPE;
-- numero di giorni di SLA2<=4 relativi al mese
sla2_maggiore dwh.mnp_dw_rec_hoc_sla.sla_due_maggiore%TYPE;
-- numero di giorni di SLA2>4 relativi al mese
sla3_minore dwh.mnp_dw_rec_hoc_sla_terzeparti.sla_tre_minore%TYPE;
-- numero di giorni di SLA3<=4 relativi al mese
sla3_maggiore dwh.mnp_dw_rec_hoc_sla_terzeparti.sla_tre_maggiore%TYPE;
-- numero di giorni di SLA3>4 relativi al mese
sla0 NUMBER; -- numero di giorni di SLA0 totale
sla1 NUMBER; -- numero di giorni di SLA1 totale
sla2 NUMBER; -- numero di giorni di SLA2 totale
sla3 NUMBER; -- numero di giorni di SLA3 totale
app_stato NUMBER; -- stato attuale della richiesta
app_data_stato_finale DATE; -- data di transizione nello stato
app_data_presa_in_carico DATE; -- data di presa in carico
data_presa_in_carico_presunta DATE; -- data di presa in carico presunta
app_data_invio_aom DATE;
-- data di invio del file XML di attivazione
app_data_prima_validazione DATE; -- data di prima validazione
data_validazione_presunta DATE; -- data di validazione presunta
app_data_esple_donating DATE; -- data di espletamento del donating
data_esple_donating_presunta DATE;
-- data di espletamento del donating presunta
app_data_cut_over_aom DATE;
-- data di cut over dell'AOM donating
app_data_config_teorica DATE;
-- data di invio del file XML di porting alla Terza Parte
app_data_config_effettiva DATE;
-- data di ricezione del file XML di espletamento dalla Terza Parte
app_aom_tp VARCHAR2 (4); -- Operatore terza parte
data_config_presunta DATE; -- data di configurazione presunta
bound NUMBER := 4;
dco_calc_aom_ora DATE;
dco_conf_teorica_19 DATE;
app_id_richiesta_tp dwh.mnp_dw_rec_hoc_tp_delta.id_richiesta%TYPE;
-- Identificativo della richiesta sulla tabella delta delle terze parti
sla1_mese_corrente NUMBER;
-- numero di giorni di SLA1 nel mese di riferimento
sla1_mesi_precedenti NUMBER;
-- numero di giorni di SLA1 dei mesi precedenti
sla2_mese_corrente NUMBER;
-- numero di giorni di SLA2 nel mese di riferimento
sla2_mesi_precedenti NUMBER;
-- numero di giorni di SLA2 dei mesi precedenti
sla3_mese_corrente NUMBER;
-- numero di giorni di SLA3 nel mese di riferimento
sla3_mesi_precedenti NUMBER;
-- numero di giorni di SLA3 dei mesi precedenti
var_stato_finale NUMBER;
-- variabile di appoggio per il codice dello sto finale
file_log UTL_FILE.file_type; -- file di log
dir_out_log VARCHAR2 (200);
line_log VARCHAR2 (200);
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta, stato, data_stato_finale, data_presa_in_carico,
data_invio_ad_aom, data_validazione, data_espletamento_donating,
data_cut_over_aom
FROM dwh.mnp_dw_rec_hoc_delta;
-- Cursore per le terze parti di cui calcolare gli SLA3
CURSOR cur_terzaparte (var_richiesta IN VARCHAR2)
IS
SELECT id_richiesta, aom_terze_parti, data_configurazione_teorica,
data_configurazione_effettiva
FROM dwh.mnp_dw_rec_hoc_tp_delta
WHERE id_richiesta = var_richiesta;
BEGIN
cod_errore := 0;
dir_out_log := 'SLA';
file_log := UTL_FILE.fopen (
dir_out_log,
'SLA_RECIPIENT_HOC_'
|| TO_CHAR (SYSDATE, 'yyyyMMdd')
|| '.log',
'w'
);
UTL_FILE.put_line (
file_log,
TO_CHAR (SYSDATE, 'yyyyMMdd HH24:mi:ss')
|| ': INIZIO CALCOLO SLA RECIPIENT HOC'
);
UTL_FILE.fflush (file_log);
DELETE FROM dwh.mnp_dw_rec_hoc_sla
WHERE mese = mese_in AND anno = anno_in;
DELETE FROM dwh.mnp_dw_rec_hoc_sla_terzeparti
WHERE mese = mese_in AND anno = anno_in;
COMMIT;
-- Calcolo ultimo giorno lavorativo del mese
ultimo_giorno_mese := dwh.fun_ultimo_giorno_lavorativo (mese_in, anno_in);
-- Calcolo primo giorno lavorativo del mese
primo_giorno_mese := dwh.fun_primo_giorno_lavorativo (mese_in, anno_in);
OPEN cur_richiesta;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta INTO app_id_richiesta,
app_stato,
app_data_stato_finale,
app_data_presa_in_carico,
app_data_invio_aom,
app_data_prima_validazione,
app_data_esple_donating,
app_data_cut_over_aom;
EXIT WHEN cur_richiesta%NOTFOUND;
-- Inizializzazione variabili
sla0_minore := 0;
sla0_maggiore := 0;
sla1_minore := 0;
sla1_maggiore := 0;
sla2_minore := 0;
sla2_maggiore := 0;
sla0 := 0;
sla1 := 0;
sla2 := 0;
sla1_mese_corrente := 0;
sla1_mesi_precedenti := 0;
sla2_mese_corrente := 0;
sla2_mesi_precedenti := 0;
IF app_data_invio_aom IS NOT NULL
THEN
-- Calcolo le date presunte
data_presa_in_carico_presunta :=
dwh.fun_giorni_piu (app_data_invio_aom, 1);
data_validazione_presunta :=
dwh.fun_giorni_piu (app_data_invio_aom, 3);
data_esple_donating_presunta := app_data_invio_aom
+ 45;
-- Calcolo SLA0 totale
IF app_data_presa_in_carico IS NULL
THEN
sla0 := 0;
ELSE
IF (TRUNC (app_data_presa_in_carico) <= ultimo_giorno_mese)
AND (TRUNC (app_data_presa_in_carico) >= primo_giorno_mese)
THEN
sla0 :=
dwh.fun_giorni_lavorativi (
app_data_presa_in_carico,
data_presa_in_carico_presunta
);
ELSE
sla0 := 0;
END IF;
END IF;
BEGIN
SELECT DECODE (finale, 1, id_stato, 0, -1)
INTO var_stato_finale
FROM mnp.mnp_stato_rec
WHERE id_stato = app_stato;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
var_stato_finale := -1;
END;
-- Calcolo SLA1 totale e corrente
IF (TRUNC (data_validazione_presunta) <= ultimo_giorno_mese)
AND ( app_data_prima_validazione IS NULL
OR app_data_prima_validazione >= primo_giorno_mese
)
THEN
IF app_data_prima_validazione IS NULL
THEN
IF app_stato = var_stato_finale
THEN
app_data_prima_validazione := app_data_stato_finale;
ELSE
app_data_prima_validazione := FUN_GIORNI_PIU(ultimo_giorno_mese,1);
END IF;
END IF;
sla1 := dwh.fun_giorni_lavorativi (
app_data_prima_validazione,
data_validazione_presunta
);
IF sla1 > 0
THEN
IF TRUNC (data_validazione_presunta) >= primo_giorno_mese
THEN
sla1_mese_corrente := sla1;
ELSE
sla1_mese_corrente :=
dwh.fun_giorni_lavorativi (
app_data_prima_validazione,
primo_giorno_mese
);
END IF;
ELSE
sla1 := 0;
sla1_mese_corrente := 0;
END IF;
ELSE
sla1 := 0;
sla1_mese_corrente := 0;
END IF;
-- Calcolo SLA1 mesi precedenti
sla1_mesi_precedenti := sla1
- sla1_mese_corrente;
-- Verifico se gli SLA1 sono positivi
IF sla1 < 0
THEN
sla1 := 0;
END IF;
IF sla1_mese_corrente < 0
THEN
sla1_mese_corrente := 0;
END IF;
IF sla1_mesi_precedenti < 0
THEN
sla1_mesi_precedenti := 0;
END IF;
-- Calcolo SLA2 totale e corrente
IF (TRUNC (data_esple_donating_presunta) <= ultimo_giorno_mese)
AND ( app_data_esple_donating IS NULL
OR app_data_esple_donating >= primo_giorno_mese
)
THEN
IF app_data_esple_donating IS NULL
THEN
IF app_stato = var_stato_finale
THEN
app_data_esple_donating := app_data_stato_finale;
ELSE
app_data_esple_donating := FUN_GIORNI_PIU(ultimo_giorno_mese,1);
END IF;
END IF;
sla2 := dwh.fun_giorni_lavorativi (
app_data_esple_donating,
data_esple_donating_presunta
);
IF sla2 > 0
THEN
IF TRUNC (data_esple_donating_presunta) >= primo_giorno_mese
THEN
sla2_mese_corrente := sla2;
ELSE
sla2_mese_corrente :=
dwh.fun_giorni_lavorativi (
app_data_esple_donating,
primo_giorno_mese
);
END IF;
ELSE
sla2 := 0;
sla2_mese_corrente := 0;
END IF;
ELSE
sla2 := 0;
sla2_mese_corrente := 0;
END IF;
-- Calcolo SLA2 mesi precedenti
sla2_mesi_precedenti := sla2
- sla2_mese_corrente;
-- Verifico se gli SLA2 sono positivi
IF sla2 < 0
THEN
sla2 := 0;
END IF;
IF sla2_mese_corrente < 0
THEN
sla2_mese_corrente := 0;
END IF;
IF sla2_mesi_precedenti < 0
THEN
sla2_mesi_precedenti := 0;
END IF;
-- Calcolo SLA0 relativo al mese di riferimento
IF sla0 > 0
THEN
IF sla0 <= bound
THEN
sla0_minore := sla0;
sla0_maggiore := 0;
ELSE
sla0_minore := bound;
sla0_maggiore := sla0
- bound;
END IF;
ELSE
-- se lo SLA totale h <= 0 gli SLA relativi al mese sono 0
sla0_minore := 0;
sla0_maggiore := 0;
END IF;
-- Calcolo SLA1 relativo al mese di riferimento
IF sla1_mese_corrente = 0
THEN
sla1_minore := 0;
sla1_maggiore := 0;
ELSE -- lo SLA1 del mese corrente h positivo
IF sla1_mesi_precedenti >= bound
THEN
sla1_minore := 0;
sla1_maggiore := sla1_mese_corrente;
ELSE
IF sla1_mese_corrente >= bound
- sla1_mesi_precedenti
THEN
sla1_minore := bound
- sla1_mesi_precedenti;
sla1_maggiore := sla1
- bound;
ELSE
-- lo SLA1 del mese corrente h minore di 4 - SLA1 dei mesi precedenti
sla1_minore := sla1_mese_corrente;
sla1_maggiore := 0;
END IF;
END IF;
END IF;
-- Calcolo SLA2 relativo al mese di riferimento
IF sla2_mese_corrente = 0
THEN
sla2_minore := 0;
sla2_maggiore := 0;
ELSE -- lo SLA2 del mese corrente h positivo
IF sla2_mesi_precedenti >= bound
THEN
sla2_minore := 0;
sla2_maggiore := sla2_mese_corrente;
ELSE
IF sla2_mese_corrente >= bound
- sla2_mesi_precedenti
THEN
sla2_minore := bound
- sla2_mesi_precedenti;
sla2_maggiore := sla2
- bound;
ELSE
-- lo SLA2 del mese corrente h minore di 4 - SLA2 dei mesi precedenti
sla2_minore := sla2_mese_corrente;
sla2_maggiore := 0;
END IF;
END IF;
END IF;
-- Se esiste almeno uno SLA nel mese di riferimento
IF sla0_minore > 0
OR sla0_maggiore > 0
OR sla1_minore > 0
OR sla1_maggiore > 0
OR sla2_minore > 0
OR sla2_maggiore > 0
THEN
-- Inserimento del record relativo al mese nella tabella degli SLA
INSERT INTO dwh.mnp_dw_rec_hoc_sla
(id_richiesta, mese, anno, sla_zero_minore,
sla_zero_maggiore, sla_uno_minore, sla_uno_maggiore,
sla_due_minore, sla_due_maggiore)
VALUES (app_id_richiesta, mese_in, anno_in, sla0_minore,
sla0_maggiore, sla1_minore, sla1_maggiore,
sla2_minore, sla2_maggiore);
END IF;
OPEN cur_terzaparte (app_id_richiesta);
-- Per ogni richiesta di cui devo calcolare gli SLA sulle Terze Parti
LOOP
FETCH cur_terzaparte INTO app_id_richiesta_tp,
app_aom_tp,
app_data_config_teorica,
app_data_config_effettiva;
EXIT WHEN cur_terzaparte%NOTFOUND;
-- Inizializzazione variabili
sla3_minore := 0;
sla3_maggiore := 0;
sla3 := 0;
sla3_mese_corrente := 0;
sla3_mesi_precedenti := 0;
IF app_data_config_teorica IS NOT NULL
THEN
-- Data cut over contenuta nel file XML di Porting con l'ora impostata alle 08:00
dco_calc_aom_ora := app_data_cut_over_aom
+ 8 / 24;
-- Data di invio del file XML di Porting alla Terza Parte con l'ora impostata alle 19:00
dco_conf_teorica_19 :=
TRUNC (app_data_config_teorica)
+ 19 / 24;
IF app_data_config_teorica <=
dwh.fun_meno_ore_lavorative (dco_calc_aom_ora, 39)
THEN
data_config_presunta :=
dwh.fun_piu_ore_lavorative (dco_calc_aom_ora, 2);
ELSE
data_config_presunta :=
dwh.fun_piu_ore_lavorative (dco_conf_teorica_19, 39);
END IF;
-- Calcolo SLA3 totale
IF (TRUNC (data_config_presunta) <= ultimo_giorno_mese)
AND ( app_data_config_effettiva IS NULL
OR app_data_config_effettiva >= primo_giorno_mese
)
THEN
IF app_data_config_effettiva IS NULL
THEN
IF app_stato = var_stato_finale
THEN
app_data_config_effettiva := app_data_stato_finale;
ELSE
app_data_config_effettiva :=
dwh.fun_giorni_piu (ultimo_giorno_mese, 1);
END IF;
END IF;
sla3 := dwh.fun_ore_lavorative (
app_data_config_effettiva,
data_config_presunta
);
IF TRUNC (data_config_presunta) >= primo_giorno_mese
THEN
sla3_mese_corrente := sla3;
ELSE
sla3_mese_corrente :=
dwh.fun_ore_lavorative (
app_data_config_effettiva,
primo_giorno_mese
);
END IF;
ELSE
sla3 := 0;
sla3_mese_corrente := 0;
END IF;
-- Calcolo SLA1 mesi precedenti
sla3_mesi_precedenti := sla3
- sla3_mese_corrente;
-- Verifico se gli SLA sono positivi
IF sla3 < 0
THEN
sla3 := 0;
END IF;
IF sla3_mese_corrente < 0
THEN
sla3_mese_corrente := 0;
END IF;
IF sla3_mesi_precedenti < 0
THEN
sla3_mesi_precedenti := 0;
END IF;
-- Calcolo SLA3 relativo al mese di riferimento
IF sla3_mese_corrente = 0
THEN -- lo SLA3 del mese corrente h 0
sla3_minore := 0;
sla3_maggiore := 0;
ELSE -- lo SLA3 del mese corrente h positivo
IF sla3_mesi_precedenti >= bound
THEN
sla3_minore := 0;
sla3_maggiore := sla3_mese_corrente;
ELSE
IF sla3_mese_corrente >= bound
- sla3_mesi_precedenti
THEN
sla3_minore := bound
- sla3_mesi_precedenti;
sla3_maggiore := sla3
- bound;
ELSE
-- lo SLA3 del mese corrente h minore di 4 - SLA3 dei mesi precedenti
sla3_minore := sla3_mese_corrente;
sla3_maggiore := 0;
END IF;
END IF;
END IF;
-- Se esiste almeno uno SLA nel mese di riferimento
IF sla3_minore > 0
OR sla3_maggiore > 0
THEN
-- Inserimento del record relativo al mese nella tabella degli SLA
INSERT INTO dwh.mnp_dw_rec_hoc_sla_terzeparti
(id_richiesta, aom_terze_parti, mese,
anno, sla_tre_minore, sla_tre_maggiore)
VALUES (app_id_richiesta_tp, app_aom_tp, mese_in,
anno_in, sla3_minore, sla3_maggiore);
END IF;
END IF;
END LOOP; -- cur_terzaparte
CLOSE cur_terzaparte;
END IF; -- data_invio_aom non nulla
COMMIT;
END LOOP; -- cur_richiesta
CLOSE cur_richiesta;
DELETE FROM dwh.mnp_dw_rec_hoc_terzeparti d
WHERE NOT EXISTS ( SELECT id_richiesta
FROM dwh.mnp_dw_rec_hoc_sla ds
WHERE ds.id_richiesta = d.id_richiesta)
AND NOT EXISTS ( SELECT id_richiesta
FROM dwh.mnp_dw_rec_hoc_sla_terzeparti ds
WHERE ds.id_richiesta = d.id_richiesta);
COMMIT;
DELETE FROM dwh.mnp_dw_rec_hoc d
WHERE NOT EXISTS ( SELECT id_richiesta
FROM dwh.mnp_dw_rec_hoc_sla ds
WHERE ds.id_richiesta = d.id_richiesta)
AND NOT EXISTS ( SELECT id_richiesta
FROM dwh.mnp_dw_rec_hoc_sla_terzeparti ds
WHERE ds.id_richiesta = d.id_richiesta);
COMMIT;
UTL_FILE.put_line (
file_log,
TO_CHAR (SYSDATE, 'yyyyMMdd HH24:mi:ss')
|| ': FINE CALCOLO SLA RECIPIENT HOC'
);
UTL_FILE.fflush (file_log);
UTL_FILE.fclose (file_log);
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line (
'Errore in CALCOLA_SLA_RECIPIENT_HOC '
|| SQLERRM
);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,263 @@
CREATE OR REPLACE PROCEDURE CALCOLA_SLA_RECIPIENT_ONLINE (cod_errore IN OUT NUMBER)
IS
-- Purpose: Calcolo degli SLA Recipient
-- La procedura calcola gli SLA Recipient per tutte
-- le richieste contenute nella tabella MNP_DW_REC_ONLINE
-- MODIFICATION HISTORY
-- A.Parati 22/10/2004 Versione Iniziale
-- identificativo della richiesta di cui calcolare gli sla
app_id_richiesta dwh.mnp_dw_rec_delta.id_richiesta%TYPE;
sla0 NUMBER; -- numero di giorni di SLA0 totale
sla1 NUMBER; -- numero di giorni di SLA1 totale
sla2 NUMBER; -- numero di giorni di SLA2 totale
sla3 NUMBER; -- numero di giorni di SLA3 totale
app_stato NUMBER; -- stato attuale della richiesta
app_data_stato_finale DATE; -- data di transizione nello stato
app_data_presa_in_carico DATE; -- data di presa in carico
data_presa_in_carico_presunta DATE; -- data di presa in carico presunta
app_data_invio_aom DATE;
-- data di invio del file XML di attivazione
app_data_validazione DATE; -- data di validazione
data_validazione_presunta DATE; -- data di validazione presunta
app_data_esple_donating DATE; -- data di espletamento del donating
data_esple_donating_presunta DATE;
-- data di espletamento del donating presunta
app_data_cut_over_aom DATE;
-- data di cut over dell'AOM donating
app_data_config_teorica DATE;
-- data di invio del file XML di porting alla Terza Parte
app_data_config_effettiva DATE;
-- data di ricezione del file XML di espletamento dalla Terza Parte
app_aom_tp VARCHAR2 (4); -- Operatore terza parte
data_config_presunta DATE; -- data di configurazione presunta
dco_calc_aom_ora DATE;
dco_conf_teorica_19 DATE;
-- Identificativo della richiesta sulla tabella delta delle terze parti
app_id_richiesta_tp dwh.mnp_dw_rec_terzeparti_delta.id_richiesta%TYPE;
var_stato_finale NUMBER;
-- variabile di appoggio per il codice dello sto finale
file_log UTL_FILE.file_type; -- file di log
dir_out_log VARCHAR2 (200);
line_log VARCHAR2 (200);
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta, stato, data_stato_finale, data_presa_in_carico,
data_invio_ad_aom, data_validazione, data_espletamento_donating,
data_cut_over_aom
FROM dwh.mnp_dw_rec_online;
-- Cursore per le terze parti di cui calcolare gli SLA3
CURSOR cur_terzaparte (var_richiesta IN VARCHAR2)
IS
SELECT id_richiesta, aom_terze_parti, data_configurazione_teorica,
data_configurazione_effettiva
FROM dwh.mnp_dw_rec_tp_online
WHERE id_richiesta = var_richiesta;
BEGIN
cod_errore := 0;
dir_out_log := 'SLA';
file_log := UTL_FILE.fopen (
dir_out_log,
'SLA_RECIPIENT_ONLINE'
|| TO_CHAR (SYSDATE, 'yyyyMMdd')
|| '.log',
'w'
);
UTL_FILE.put_line (
file_log,
TO_CHAR (SYSDATE, 'yyyyMMdd HH24:mi:ss')
|| ': INIZIO CALCOLO SLA RECIPIENT ONLINE'
);
UTL_FILE.fflush (file_log);
OPEN cur_richiesta;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta INTO app_id_richiesta,
app_stato,
app_data_stato_finale,
app_data_presa_in_carico,
app_data_invio_aom,
app_data_validazione,
app_data_esple_donating,
app_data_cut_over_aom;
EXIT WHEN cur_richiesta%NOTFOUND;
-- Inizializzazione variabili
sla0 := 0;
sla1 := 0;
sla2 := 0;
-- Calcolo le date presunte
IF app_data_invio_aom IS NOT NULL
THEN
data_presa_in_carico_presunta :=
dwh.fun_giorni_piu (app_data_invio_aom, 1);
data_validazione_presunta :=
dwh.fun_giorni_piu (app_data_invio_aom, 3);
data_esple_donating_presunta :=
dwh.fun_giorni_piu (app_data_invio_aom, 6);
-- Calcolo SLA0 totale
IF app_data_presa_in_carico IS NULL
THEN
sla0 := 0;
ELSE
sla0 := dwh.fun_giorni_lavorativi (
app_data_presa_in_carico,
data_presa_in_carico_presunta
);
END IF;
BEGIN
SELECT DECODE (finale, 1, id_stato, 0, -1)
INTO var_stato_finale
FROM mnp.mnp_stato_rec
WHERE id_stato = app_stato;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
var_stato_finale := -1;
END;
-- Calcolo SLA1 totale e corrente
IF app_data_validazione IS NULL
THEN
IF app_stato = var_stato_finale
THEN
app_data_validazione := app_data_stato_finale;
ELSE
app_data_validazione := TRUNC (SYSDATE);
END IF;
END IF;
sla1 := dwh.fun_giorni_lavorativi (
app_data_validazione,
data_validazione_presunta
);
-- Verifico se gli SLA1 sono positivi
IF sla1 < 0
THEN
sla1 := 0;
END IF;
-- Calcolo SLA2 totale e corrente
IF app_data_esple_donating IS NULL
THEN
IF app_stato = var_stato_finale
THEN
app_data_esple_donating := app_data_stato_finale;
ELSE
app_data_esple_donating := TRUNC (SYSDATE);
END IF;
END IF;
sla2 := dwh.fun_giorni_lavorativi (
app_data_esple_donating,
data_esple_donating_presunta
);
-- Verifico se gli SLA2 sono positivi
IF sla2 < 0
THEN
sla2 := 0;
END IF;
UPDATE dwh.mnp_dw_rec_online d
SET d.sla_zero = sla0,
d.sla_uno = sla1,
d.sla_due = sla2
WHERE d.id_richiesta = app_id_richiesta;
COMMIT;
OPEN cur_terzaparte (app_id_richiesta);
-- Per ogni richiesta di cui devo calcolare gli SLA sulle Terze Parti
LOOP
FETCH cur_terzaparte INTO app_id_richiesta_tp,
app_aom_tp,
app_data_config_teorica,
app_data_config_effettiva;
EXIT WHEN cur_terzaparte%NOTFOUND;
-- Inizializzazione variabili
sla3 := 0;
IF app_data_config_teorica IS NOT NULL
THEN
-- Data cut over contenuta nel file XML di Porting con l'ora impostata alle 08:00
dco_calc_aom_ora := app_data_cut_over_aom
+ 8 / 24;
-- Data di invio del file XML di Porting alla Terza Parte con l'ora impostata alle 19:00
dco_conf_teorica_19 :=
TRUNC (app_data_config_teorica)
+ 19 / 24;
IF app_data_config_teorica <=
dwh.fun_meno_ore_lavorative (dco_calc_aom_ora, 39)
THEN
data_config_presunta :=
dwh.fun_piu_ore_lavorative (dco_calc_aom_ora, 2);
ELSE
data_config_presunta :=
dwh.fun_piu_ore_lavorative (dco_conf_teorica_19, 39);
END IF;
-- Calcolo SLA3 totale
IF app_data_config_effettiva IS NULL
THEN
IF app_stato = var_stato_finale
THEN
app_data_config_effettiva := app_data_stato_finale;
ELSE
app_data_config_effettiva :=
dwh.fun_giorni_piu (TRUNC (SYSDATE), 1);
END IF;
END IF;
sla3 := dwh.fun_ore_lavorative (
app_data_config_effettiva,
data_config_presunta
);
-- Verifico se gli SLA sono positivi
IF sla3 < 0
THEN
sla3 := 0;
END IF;
UPDATE dwh.mnp_dw_rec_tp_online d
SET d.sla_tre = sla3
WHERE d.id_richiesta = app_id_richiesta
AND d.aom_terze_parti = app_aom_tp;
COMMIT;
END IF;
END LOOP; -- cur_terzaparte
CLOSE cur_terzaparte;
END IF; -- data_invio_aom non nulla
COMMIT;
END LOOP; -- cur_richiesta
CLOSE cur_richiesta;
UTL_FILE.put_line (
file_log,
TO_CHAR (SYSDATE, 'yyyyMMdd HH24:mi:ss')
|| ': FINE CALCOLO SLA RECIPIENT ONLINE'
);
UTL_FILE.fflush (file_log);
UTL_FILE.fclose (file_log);
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ( 'Errore in CALCOLA_SLA_RECIPIENT '
|| SQLERRM);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,266 @@
CREATE OR REPLACE PROCEDURE CALCOLA_SLA_RECIPIENT_TACS (
mese_in IN NUMBER,
anno_in IN NUMBER,
cod_errore IN OUT NUMBER
)
IS
-- Purpose: Calcolo degli SLA Recipient TACS
-- La procedura calcola gli SLA Recipient relativi al mese di riferimento per tutte
-- le richieste contenute nella tabella MNP_DW_REC_TACS_DELTA ed inserisce un record per
-- ogni Terza Parte, con i valori caolcolati, nella tabella MNP_DW_REC_TACS_SLA_TERZEPARTI
-- MODIFICATION HISTORY
-- A.Parati 15/07/2004 Versione Iniziale
-- A.Parati 25/08/2004 Modifica alla logica di calcolo degli SLA
ultimo_giorno_mese DATE;
-- Ultimo giorno lavorativo del mese di riferiemnto
primo_giorno_mese DATE;
-- Primo giorno lavorativo del mese di riferimento
-- identificativo della richiesta di cui calcolare gli sla
app_id_richiesta dwh.mnp_dw_rec_tacs_delta.id_richiesta%TYPE;
-- numero di giorni di SLA3<=4 relativi al mese
sla3_minore dwh.mnp_dw_rec_tacs_sla_terzeparti.sla_tre_minore%TYPE;
-- numero di giorni di SLA3>4 relativi al mese
sla3_maggiore dwh.mnp_dw_rec_tacs_sla_terzeparti.sla_tre_maggiore%TYPE;
sla3 NUMBER; -- numero di giorni di SLA3 totale
sla3_mese_corrente NUMBER;
-- numero di giorni di SLA3 nel mese di riferimento
sla3_mesi_precedenti NUMBER;
-- numero di giorni di SLA3 dei mesi precedenti
app_data_cut_over_calc DATE; -- data di cut over calcolata
app_data_config_teorica DATE;
-- data di invio del file XML di porting alla Terza Parte
app_data_config_effettiva DATE;
-- data di ricezione del file XML di espletamento dalla Terza Parte
data_config_presunta DATE; -- data di configurazione presunta
bound NUMBER := 4;
dco_calc_ora DATE;
dco_conf_teorica_19 DATE;
-- Identificativo della richiesta sulla tabella delta delle terze parti
app_id_richiesta_tp dwh.mnp_dw_rec_tacs_tp_delta.id_richiesta%TYPE;
file_log UTL_FILE.file_type; -- file di log
dir_out_log VARCHAR2 (200);
line_log VARCHAR2 (200);
var_stato_finale NUMBER;
-- variabile di appoggio per il codice dello stato finale
app_stato NUMBER; -- stato attuale della richiesta
app_data_stato_finale DATE; -- data di transizione nello stato
app_aom_tp VARCHAR2 (4); -- Operatore terza parte
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta, stato, data_stato_finale, data_cut_over_calc
FROM dwh.mnp_dw_rec_tacs_delta;
-- Cursore per le terze parti di cui calcolare gli SLA3
CURSOR cur_terzaparte (var_richiesta IN VARCHAR2)
IS
SELECT id_richiesta, aom_terze_parti, data_configurazione_teorica,
data_configurazione_effettiva
FROM dwh.mnp_dw_rec_tacs_tp_delta
WHERE id_richiesta = var_richiesta;
BEGIN
cod_errore := 0;
dir_out_log := 'SLA';
file_log :=
UTL_FILE.fopen (dir_out_log,
'SLA_RECIPIENT_TACS_'
|| TO_CHAR (SYSDATE, 'yyyyMMdd')
|| '.log',
'w'
);
UTL_FILE.put_line (file_log,
TO_CHAR (SYSDATE, 'yyyyMMdd HH24:mi:ss')
|| ': INIZIO CALCOLO SLA RECIPIENT TACS'
);
UTL_FILE.fflush (file_log);
DELETE FROM dwh.mnp_dw_rec_tacs_sla_terzeparti
WHERE mese = mese_in AND anno = anno_in;
COMMIT;
-- Calcolo ultimo giorno lavorativo del mese
ultimo_giorno_mese := dwh.fun_ultimo_giorno_lavorativo (mese_in, anno_in);
-- Calcolo primo giorno lavorativo del mese
primo_giorno_mese := dwh.fun_primo_giorno_lavorativo (mese_in, anno_in);
OPEN cur_richiesta;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta
INTO app_id_richiesta, app_stato, app_data_stato_finale,
app_data_cut_over_calc;
EXIT WHEN cur_richiesta%NOTFOUND;
OPEN cur_terzaparte (app_id_richiesta);
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_terzaparte
INTO app_id_richiesta_tp, app_aom_tp, app_data_config_teorica,
app_data_config_effettiva;
EXIT WHEN cur_terzaparte%NOTFOUND;
-- Inizializzazione variabili
sla3_minore := 0;
sla3_maggiore := 0;
sla3 := 0;
sla3_mese_corrente := 0;
sla3_mesi_precedenti := 0;
IF app_data_config_teorica IS NOT NULL
THEN
dco_calc_ora := app_data_cut_over_calc + 8 / 24;
dco_conf_teorica_19 := TRUNC (app_data_config_teorica) + 19 / 24;
IF app_data_config_teorica <=
dwh.fun_meno_ore_lavorative (dco_calc_ora, 39)
THEN
data_config_presunta :=
dwh.fun_piu_ore_lavorative (dco_calc_ora, 2);
ELSE
data_config_presunta :=
dwh.fun_piu_ore_lavorative (dco_conf_teorica_19, 39);
END IF;
BEGIN
SELECT DECODE (finale, 1, id_stato, 0, -1)
INTO var_stato_finale
FROM mnp.mnp_stato_rec
WHERE id_stato = app_stato;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
var_stato_finale := -1;
END;
-- Calcolo SLA3 totale
IF (TRUNC (data_config_presunta) <= ultimo_giorno_mese)
AND ( app_data_config_effettiva IS NULL
OR app_data_config_effettiva >= primo_giorno_mese
)
THEN
IF app_data_config_effettiva IS NULL
THEN
IF app_stato = var_stato_finale
THEN
app_data_config_effettiva := app_data_stato_finale;
ELSE
app_data_config_effettiva :=
dwh.fun_giorni_piu (ultimo_giorno_mese, 1);
END IF;
END IF;
sla3 :=
dwh.fun_ore_lavorative (app_data_config_effettiva,
data_config_presunta
);
IF TRUNC (data_config_presunta) >= primo_giorno_mese
THEN
sla3_mese_corrente := sla3;
ELSE
sla3_mese_corrente :=
dwh.fun_ore_lavorative (app_data_config_effettiva,
primo_giorno_mese
);
END IF;
ELSE
sla3 := 0;
sla3_mese_corrente := 0;
END IF;
-- Calcolo SLA1 mesi precedenti
sla3_mesi_precedenti := sla3 - sla3_mese_corrente;
-- Verifico se gli SLA sono positivi
IF sla3 < 0
THEN
sla3 := 0;
END IF;
IF sla3_mese_corrente < 0
THEN
sla3_mese_corrente := 0;
END IF;
IF sla3_mesi_precedenti < 0
THEN
sla3_mesi_precedenti := 0;
END IF;
-- Calcolo SLA3 relativo al mese di riferimento
IF sla3_mese_corrente = 0
THEN -- lo SLA3 del mese corrente h 0
sla3_minore := 0;
sla3_maggiore := 0;
ELSE -- lo SLA3 del mese corrente h positivo
IF sla3_mesi_precedenti >= bound
THEN
sla3_minore := 0;
sla3_maggiore := sla3_mese_corrente;
ELSE
IF sla3_mese_corrente >= bound - sla3_mesi_precedenti
THEN
sla3_minore := bound - sla3_mesi_precedenti;
sla3_maggiore := sla3 - bound;
ELSE
-- lo SLA3 del mese corrente h minore di 4 - SLA3 dei mesi precedenti
sla3_minore := sla3_mese_corrente;
sla3_maggiore := 0;
END IF;
END IF;
END IF;
-- Se esiste almeno uno SLA nel mese di riferimento
IF sla3_minore > 0 OR sla3_maggiore > 0
THEN
-- Inserimento del record relativo al mese nella tabella degli SLA
INSERT INTO dwh.mnp_dw_rec_tacs_sla_terzeparti
(id_richiesta, aom_terze_parti, mese,
anno, sla_tre_minore, sla_tre_maggiore
)
VALUES (app_id_richiesta_tp, app_aom_tp, mese_in,
anno_in, sla3_minore, sla3_maggiore
);
END IF;
END IF; -- non ho inviato il file di Porting -> lo SLA3 h nullo
END LOOP; -- cur_terzaparte
COMMIT;
CLOSE cur_terzaparte;
END LOOP; -- cur_richiesta
CLOSE cur_richiesta;
DELETE FROM dwh.mnp_dw_rec_tacs_terzeparti d
WHERE NOT EXISTS (SELECT id_richiesta
FROM dwh.mnp_dw_rec_tacs_sla_terzeparti ds
WHERE ds.id_richiesta = d.id_richiesta);
COMMIT;
DELETE FROM dwh.mnp_dw_rec_tacs d
WHERE NOT EXISTS (SELECT id_richiesta
FROM dwh.mnp_dw_rec_tacs_sla_terzeparti ds
WHERE ds.id_richiesta = d.id_richiesta);
COMMIT;
UTL_FILE.put_line (file_log,
TO_CHAR (SYSDATE, 'yyyyMMdd HH24:mi:ss')
|| ': FINE CALCOLO SLA RECIPIENT TACS'
);
UTL_FILE.fflush (file_log);
UTL_FILE.fclose (file_log);
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in CALCOLA_SLA_RECIPIENT_TACS ' || SQLERRM
);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,253 @@
CREATE OR REPLACE PROCEDURE CALCOLA_SLA_REC_HOC_ONLINE (cod_errore IN OUT NUMBER)
IS
-- Purpose: Calcolo degli SLA Recipient ad HOC
-- La procedura calcola gli SLA Recipient per tutte
-- le richieste contenute nella tabella MNP_DW_REC_HOC_ONLINE
-- MODIFICATION HISTORY
app_id_richiesta dwh.mnp_dw_rec_hoc_online.id_richiesta%TYPE;
-- identificativo della richiesta di cui calcolare gli sla
sla0 NUMBER; -- numero di giorni di SLA0 totale
sla1 NUMBER; -- numero di giorni di SLA1 totale
sla2 NUMBER; -- numero di giorni di SLA2 totale
sla3 NUMBER; -- numero di giorni di SLA3 totale
app_stato NUMBER; -- stato attuale della richiesta
app_data_stato_finale DATE; -- data di transizione nello stato
app_data_presa_in_carico DATE; -- data di presa in carico
data_presa_in_carico_presunta DATE; -- data di presa in carico presunta
app_data_invio_aom DATE;
-- data di invio del file XML di attivazione
app_data_prima_validazione DATE; -- data di prima validazione
data_validazione_presunta DATE; -- data di validazione presunta
app_data_esple_donating DATE; -- data di espletamento del donating
data_esple_donating_presunta DATE;
-- data di espletamento del donating presunta
app_data_cut_over_aom DATE;
-- data di cut over dell'AOM donating
app_data_config_teorica DATE;
-- data di invio del file XML di porting alla Terza Parte
app_data_config_effettiva DATE;
-- data di ricezione del file XML di espletamento dalla Terza Parte
app_aom_tp VARCHAR2 (4); -- Operatore terza parte
data_config_presunta DATE; -- data di configurazione presunta
dco_calc_aom_ora DATE;
dco_conf_teorica_19 DATE;
app_id_richiesta_tp dwh.mnp_dw_rec_hoc_tp_online.id_richiesta%TYPE;
-- Identificativo della richiesta sulla tabella delta delle terze parti
var_stato_finale NUMBER;
-- variabile di appoggio per il codice dello sto finale
file_log UTL_FILE.file_type; -- file di log
dir_out_log VARCHAR2 (200);
line_log VARCHAR2 (200);
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta, stato, data_stato_finale, data_presa_in_carico,
data_invio_ad_aom, data_validazione, data_espletamento_donating,
data_cut_over_aom
FROM dwh.mnp_dw_rec_hoc_online;
-- Cursore per le terze parti di cui calcolare gli SLA3
CURSOR cur_terzaparte (var_richiesta IN VARCHAR2)
IS
SELECT id_richiesta, aom_terze_parti, data_configurazione_teorica,
data_configurazione_effettiva
FROM dwh.mnp_dw_rec_hoc_tp_online
WHERE id_richiesta = var_richiesta;
BEGIN
cod_errore := 0;
dir_out_log := 'SLA';
file_log :=
UTL_FILE.fopen (dir_out_log,
'SLA_RECIPIENT_HOC_ONLINE'
|| TO_CHAR (SYSDATE, 'yyyyMMdd')
|| '.log',
'w'
);
UTL_FILE.put_line (file_log,
TO_CHAR (SYSDATE, 'yyyyMMdd HH24:mi:ss')
|| ': INIZIO CALCOLO SLA RECIPIENT HOC ONLINE'
);
UTL_FILE.fflush (file_log);
OPEN cur_richiesta;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta
INTO app_id_richiesta, app_stato, app_data_stato_finale,
app_data_presa_in_carico, app_data_invio_aom,
app_data_prima_validazione, app_data_esple_donating,
app_data_cut_over_aom;
EXIT WHEN cur_richiesta%NOTFOUND;
-- Inizializzazione variabili
sla0 := 0;
sla1 := 0;
sla2 := 0;
IF app_data_invio_aom IS NOT NULL
THEN
-- Calcolo le date presunte
data_presa_in_carico_presunta :=
dwh.fun_giorni_piu (app_data_invio_aom, 1);
data_validazione_presunta :=
dwh.fun_giorni_piu (app_data_invio_aom, 3);
data_esple_donating_presunta := app_data_invio_aom + 45;
-- Calcolo SLA0 totale
IF app_data_presa_in_carico IS NULL
THEN
sla0 := 0;
ELSE
sla0 :=
dwh.fun_giorni_lavorativi (app_data_presa_in_carico,
data_presa_in_carico_presunta
);
END IF;
BEGIN
SELECT DECODE (finale, 1, id_stato, 0, -1)
INTO var_stato_finale
FROM mnp.mnp_stato_rec
WHERE id_stato = app_stato;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
var_stato_finale := -1;
END;
-- Calcolo SLA1 totale e corrente
IF app_data_prima_validazione IS NULL
THEN
IF app_stato = var_stato_finale
THEN
app_data_prima_validazione := app_data_stato_finale;
ELSE
app_data_prima_validazione := TRUNC (SYSDATE);
END IF;
END IF;
sla1 :=
dwh.fun_giorni_lavorativi (app_data_prima_validazione,
data_validazione_presunta
);
-- Verifico se gli SLA1 sono positivi
IF sla1 < 0
THEN
sla1 := 0;
END IF;
IF app_data_esple_donating IS NULL
THEN
IF app_stato = var_stato_finale
THEN
app_data_esple_donating := app_data_stato_finale;
ELSE
app_data_esple_donating := TRUNC (SYSDATE);
END IF;
END IF;
sla2 :=
dwh.fun_giorni_lavorativi (app_data_esple_donating,
data_esple_donating_presunta
);
-- Verifico se gli SLA2 sono positivi
IF sla2 < 0
THEN
sla2 := 0;
END IF;
UPDATE dwh.mnp_dw_rec_hoc_online d
SET d.sla_zero = sla0,
d.sla_uno = sla1,
d.sla_due = sla2
WHERE d.id_richiesta = app_id_richiesta;
OPEN cur_terzaparte (app_id_richiesta);
-- Per ogni richiesta di cui devo calcolare gli SLA sulle Terze Parti
LOOP
FETCH cur_terzaparte
INTO app_id_richiesta_tp, app_aom_tp, app_data_config_teorica,
app_data_config_effettiva;
EXIT WHEN cur_terzaparte%NOTFOUND;
-- Inizializzazione variabili
sla3 := 0;
IF app_data_config_teorica IS NOT NULL
THEN
-- Data cut over contenuta nel file XML di Porting con l'ora impostata alle 08:00
dco_calc_aom_ora := app_data_cut_over_aom + 8 / 24;
-- Data di invio del file XML di Porting alla Terza Parte con l'ora impostata alle 19:00
dco_conf_teorica_19 :=
TRUNC (app_data_config_teorica)
+ 19 / 24;
IF app_data_config_teorica <=
dwh.fun_meno_ore_lavorative (dco_calc_aom_ora, 39)
THEN
data_config_presunta :=
dwh.fun_piu_ore_lavorative (dco_calc_aom_ora, 2);
ELSE
data_config_presunta :=
dwh.fun_piu_ore_lavorative (dco_conf_teorica_19, 39);
END IF;
-- Calcolo SLA3 totale
IF app_data_config_effettiva IS NULL
THEN
IF app_stato = var_stato_finale
THEN
app_data_config_effettiva := app_data_stato_finale;
ELSE
app_data_config_effettiva :=
dwh.fun_giorni_piu (TRUNC (SYSDATE), 1);
END IF;
END IF;
sla3 :=
dwh.fun_ore_lavorative (app_data_config_effettiva,
data_config_presunta
);
-- Verifico se gli SLA sono positivi
IF sla3 < 0
THEN
sla3 := 0;
END IF;
UPDATE dwh.mnp_dw_rec_hoc_tp_online d
SET d.sla_tre = sla3
WHERE d.id_richiesta = app_id_richiesta
AND d.aom_terze_parti = app_aom_tp;
END IF;
END LOOP; -- cur_terzaparte
CLOSE cur_terzaparte;
END IF; -- data_invio_aom non nulla
COMMIT;
END LOOP; -- cur_richiesta
CLOSE cur_richiesta;
UTL_FILE.put_line (file_log,
TO_CHAR (SYSDATE, 'yyyyMMdd HH24:mi:ss')
|| ': FINE CALCOLO SLA RECIPIENT HOC ONLINE'
);
UTL_FILE.fflush (file_log);
UTL_FILE.fclose (file_log);
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ( 'Errore in CALCOLA_SLA_RECIPIENT_HOC ONLINE '
|| SQLERRM
);
RETURN;
END;
/

View File

@@ -0,0 +1,162 @@
CREATE OR REPLACE PROCEDURE CALCOLA_SLA_REC_TACS_ONLINE (cod_errore IN OUT NUMBER)
IS
-- Purpose: Calcolo degli SLA Recipient TACS
-- La procedura calcola gli SLA Recipient per tutte
-- le richieste contenute nella tabella MNP_DW_REC_TACS_ONLINE ed inserisce un record per
-- ogni Terza Parte, con i valori caolcolati, nella tabella MNP_DW_REC_TACS_SLA_TP_ONLINE
-- MODIFICATION HISTORY
-- identificativo della richiesta di cui calcolare gli sla
app_id_richiesta dwh.mnp_dw_rec_tacs_delta.id_richiesta%TYPE;
-- numero di giorni di SLA3<=4 relativi al mese
sla3 NUMBER; -- numero di giorni di SLA3 totale
app_data_cut_over_calc DATE; -- data di cut over calcolata
app_data_config_teorica DATE;
-- data di invio del file XML di porting alla Terza Parte
app_data_config_effettiva DATE;
-- data di ricezione del file XML di espletamento dalla Terza Parte
data_config_presunta DATE; -- data di configurazione presunta
dco_calc_ora DATE;
dco_conf_teorica_19 DATE;
-- Identificativo della richiesta sulla tabella delta delle terze parti
app_id_richiesta_tp dwh.mnp_dw_rec_tacs_tp_delta.id_richiesta%TYPE;
file_log UTL_FILE.file_type; -- file di log
dir_out_log VARCHAR2 (200);
line_log VARCHAR2 (200);
var_stato_finale NUMBER;
-- variabile di appoggio per il codice dello stato finale
app_stato NUMBER; -- stato attuale della richiesta
app_data_stato_finale DATE; -- data di transizione nello stato
app_aom_tp VARCHAR2 (4); -- Operatore terza parte
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta, stato, data_stato_finale, data_cut_over_calc
FROM dwh.mnp_dw_rec_tacs_online;
-- Cursore per le terze parti di cui calcolare gli SLA3
CURSOR cur_terzaparte (var_richiesta IN VARCHAR2)
IS
SELECT id_richiesta, aom_terze_parti, data_configurazione_teorica,
data_configurazione_effettiva
FROM dwh.mnp_dw_rec_tacs_tp_online
WHERE id_richiesta = var_richiesta;
BEGIN
cod_errore := 0;
dir_out_log := 'SLA';
file_log :=
UTL_FILE.fopen (dir_out_log,
'SLA_RECIPIENT_TACS_ONLINE'
|| TO_CHAR (SYSDATE, 'yyyyMMdd')
|| '.log',
'w'
);
UTL_FILE.put_line (file_log,
TO_CHAR (SYSDATE, 'yyyyMMdd HH24:mi:ss')
|| ': INIZIO CALCOLO SLA RECIPIENT TACS ONLINE'
);
UTL_FILE.fflush (file_log);
OPEN cur_richiesta;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta
INTO app_id_richiesta, app_stato, app_data_stato_finale,
app_data_cut_over_calc;
EXIT WHEN cur_richiesta%NOTFOUND;
OPEN cur_terzaparte (app_id_richiesta);
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_terzaparte
INTO app_id_richiesta_tp, app_aom_tp, app_data_config_teorica,
app_data_config_effettiva;
EXIT WHEN cur_terzaparte%NOTFOUND;
-- Inizializzazione variabili
sla3 := 0;
IF app_data_config_teorica IS NOT NULL
THEN
dco_calc_ora := app_data_cut_over_calc + 8 / 24;
dco_conf_teorica_19 := TRUNC (app_data_config_teorica) + 19 / 24;
IF app_data_config_teorica <=
dwh.fun_meno_ore_lavorative (dco_calc_ora, 39)
THEN
data_config_presunta :=
dwh.fun_piu_ore_lavorative (dco_calc_ora, 2);
ELSE
data_config_presunta :=
dwh.fun_piu_ore_lavorative (dco_conf_teorica_19, 39);
END IF;
BEGIN
SELECT DECODE (finale, 1, id_stato, 0, -1)
INTO var_stato_finale
FROM mnp.mnp_stato_rec
WHERE id_stato = app_stato;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
var_stato_finale := -1;
END;
-- Calcolo SLA3 totale
IF app_data_config_effettiva IS NULL
THEN
IF app_stato = var_stato_finale
THEN
app_data_config_effettiva := app_data_stato_finale;
ELSE
app_data_config_effettiva :=
dwh.fun_giorni_piu (trunc(sysdate), 1);
END IF;
END IF;
sla3 :=
dwh.fun_ore_lavorative (app_data_config_effettiva,
data_config_presunta
);
-- Verifico se gli SLA sono positivi
IF sla3 < 0
THEN
sla3 := 0;
END IF;
-- Se esiste almeno uno SLA nel mese di riferimento
UPDATE dwh.mnp_dw_rec_tacs_tp_online d
SET d.sla_tre = sla3
WHERE d.id_richiesta = app_id_richiesta
AND d.aom_terze_parti = app_aom_tp;
END IF; -- non ho inviato il file di Porting -> lo SLA3 h nullo
END LOOP; -- cur_terzaparte
COMMIT;
CLOSE cur_terzaparte;
END LOOP; -- cur_richiesta
CLOSE cur_richiesta;
COMMIT;
UTL_FILE.put_line (file_log,
TO_CHAR (SYSDATE, 'yyyyMMdd HH24:mi:ss')
|| ': FINE CALCOLO SLA RECIPIENT TACS ONLINE'
);
UTL_FILE.fflush (file_log);
UTL_FILE.fclose (file_log);
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ( 'Errore in CALCOLA_SLA_RECIPIENT_TACS ONLINE '
|| SQLERRM
);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,249 @@
CREATE OR REPLACE PROCEDURE CALCOLA_SLA_TERZEPARTI (
mese_in IN NUMBER,
anno_in IN NUMBER,
cod_errore IN OUT NUMBER
)
IS
-- Purpose: Calcolo degli SLA Terze Parti
-- La procedura calcola gli SLA Terze Parti relativi al mese di riferimento per tutte
-- le richieste contenute nella tabella MNP_DW_PORTING_DELTA ed inserisce un record
-- con i valori caolcolati nella tabella MNP_DW_PORTING_SLA
-- MODIFICATION HISTORY
-- A.Parati 15/07/2004 Versione Iniziale
-- A.Parati 24/08/2004 Modifica al meccanismo di calcolo
ultimo_giorno_mese DATE;
-- Ultimo giorno lavorativo del mese di riferiemnto
primo_giorno_mese DATE;
-- Primo giorno lavorativo del mese di riferimento
app_id_richiesta dwh.mnp_dw_porting_delta.id_richiesta%TYPE;
-- identificativo della richiesta di cui calcolare gli sla
sla3_minore dwh.mnp_dw_porting_sla.sla_tre_minore%TYPE;
-- numero di giorni di SLA3<=4 relativi al mese
sla3_maggiore dwh.mnp_dw_porting_sla.sla_tre_maggiore%TYPE;
-- numero di giorni di SLA3>4 relativi al mese
sla3 NUMBER; -- numero di giorni di SLA3 totale
sla3_mese_corrente NUMBER;
-- numero di giorni di SLA3 nel mese di riferimento
sla3_mesi_precedenti NUMBER;
-- numero di giorni di SLA3 dei mesi precedenti
app_data_config_teorica DATE;
-- data di ricezione del file XML di porting
app_data_config_effettiva DATE;
-- data di invio del file di espletamento
app_data_cut_over_calc DATE; -- data di cut over calcolata
data_config_presunta DATE; -- data di configurazione presunta
bound NUMBER := 4;
dco_calc_ora DATE;
dco_conf_teorica_19 DATE;
file_log UTL_FILE.file_type; -- file di log
dir_out_log VARCHAR2 (200);
line_log VARCHAR2 (200);
var_stato_finale NUMBER;
-- variabile di appoggio per il codice dello sto finale
app_stato NUMBER; -- stato attuale della richiesta
app_data_stato_finale DATE; -- data di transizione nello stato
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta, stato, data_stato_finale,
data_configurazione_teorica, data_configurazione_effettiva,
data_cut_over_calc
FROM dwh.mnp_dw_porting_delta;
BEGIN
cod_errore := 0;
dir_out_log := 'SLA';
file_log := UTL_FILE.fopen (
dir_out_log,
'SLA_TERZAPARTE_'
|| TO_CHAR (SYSDATE, 'yyyyMMdd')
|| '.log',
'w'
);
UTL_FILE.put_line (
file_log,
TO_CHAR (SYSDATE, 'yyyyMMdd HH24:mi:ss')
|| ': INIZIO CALCOLO SLA TERZA PARTE'
);
UTL_FILE.fflush (file_log);
DELETE FROM dwh.mnp_dw_porting_sla
WHERE mese = mese_in AND anno = anno_in;
COMMIT;
-- Calcolo ultimo giorno lavorativo del mese
ultimo_giorno_mese := dwh.fun_ultimo_giorno_lavorativo (mese_in, anno_in);
-- Calcolo primo giorno lavorativo del mese
primo_giorno_mese := dwh.fun_primo_giorno_lavorativo (mese_in, anno_in);
OPEN cur_richiesta;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta INTO app_id_richiesta,
app_stato,
app_data_stato_finale,
app_data_config_teorica,
app_data_config_effettiva,
app_data_cut_over_calc;
EXIT WHEN cur_richiesta%NOTFOUND;
-- Inizializzazione variabili
sla3_minore := 0;
sla3_maggiore := 0;
sla3 := 0;
sla3_mese_corrente := 0;
sla3_mesi_precedenti := 0;
IF app_data_config_teorica IS NOT NULL
THEN
-- Data cut over contenuta nel file XML di Porting con l'ora impostata alle 08:00
dco_calc_ora := app_data_cut_over_calc
+ 8 / 24;
-- Data di ricezione del file XML di Porting dall'operatore Recipient con l'ora impostata alle 19:00
dco_conf_teorica_19 := TRUNC (app_data_config_teorica)
+ 19 / 24;
IF app_data_config_teorica <=
dwh.fun_meno_ore_lavorative (dco_calc_ora, 39)
THEN
data_config_presunta :=
dwh.fun_piu_ore_lavorative (dco_calc_ora, 2);
ELSE
data_config_presunta :=
dwh.fun_piu_ore_lavorative (dco_conf_teorica_19, 39);
END IF;
BEGIN
SELECT DECODE (finale, 1, id_stato, 0, -1)
INTO var_stato_finale
FROM mnp.mnp_stato_porting
WHERE id_stato = app_stato;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
var_stato_finale := -1;
END;
-- Calcolo SLA3 totale
IF (TRUNC (data_config_presunta) <= ultimo_giorno_mese)
AND ( app_data_config_effettiva IS NULL
OR app_data_config_effettiva >= primo_giorno_mese
)
THEN
IF app_data_config_effettiva IS NULL
THEN
IF app_stato = var_stato_finale
THEN
app_data_config_effettiva := app_data_stato_finale;
ELSE
app_data_config_effettiva :=
dwh.fun_giorni_piu (ultimo_giorno_mese, 1);
END IF;
END IF;
sla3 := dwh.fun_ore_lavorative (
app_data_config_effettiva,
data_config_presunta
);
IF TRUNC (data_config_presunta) >= primo_giorno_mese
THEN
sla3_mese_corrente := sla3;
ELSE
sla3_mese_corrente :=
dwh.fun_ore_lavorative (
app_data_config_effettiva,
primo_giorno_mese
);
END IF;
ELSE
sla3 := 0;
sla3_mese_corrente := 0;
END IF;
-- Calcolo SLA1 mesi precedenti
sla3_mesi_precedenti := sla3
- sla3_mese_corrente;
-- Verifico se gli SLA sono positivi
IF sla3 < 0
THEN
sla3 := 0;
END IF;
IF sla3_mese_corrente < 0
THEN
sla3_mese_corrente := 0;
END IF;
IF sla3_mesi_precedenti < 0
THEN
sla3_mesi_precedenti := 0;
END IF;
-- Calcolo SLA3 relativo al mese di riferimento
IF sla3_mese_corrente = 0
THEN -- lo SLA3 del mese corrente h 0
sla3_minore := 0;
sla3_maggiore := 0;
ELSE -- lo SLA3 del mese corrente h positivo
IF sla3_mesi_precedenti >= bound
THEN
sla3_minore := 0;
sla3_maggiore := sla3_mese_corrente;
ELSE
IF sla3_mese_corrente >= bound
- sla3_mesi_precedenti
THEN
sla3_minore := bound
- sla3_mesi_precedenti;
sla3_maggiore := sla3
- bound;
ELSE
-- lo SLA3 del mese corrente h minore di 4 - SLA3 dei mesi precedenti
sla3_minore := sla3_mese_corrente;
sla3_maggiore := 0;
END IF;
END IF;
END IF;
-- Se esiste almeno uno SLA nel mese di riferimento
IF sla3_minore > 0
OR sla3_maggiore > 0
THEN
-- Inserimento del record relativo al mese nella tabella degli SLA
INSERT INTO dwh.mnp_dw_porting_sla
(id_richiesta, mese, anno, sla_tre_minore,
sla_tre_maggiore)
VALUES (app_id_richiesta, mese_in, anno_in, sla3_minore,
sla3_maggiore);
COMMIT;
END IF;
END IF;
END LOOP;
CLOSE cur_richiesta;
DELETE FROM dwh.mnp_dw_porting d
WHERE NOT EXISTS ( SELECT id_richiesta
FROM dwh.mnp_dw_porting_sla ds
WHERE ds.id_richiesta = d.id_richiesta);
COMMIT;
UTL_FILE.put_line (
file_log,
TO_CHAR (SYSDATE, 'yyyyMMdd HH24:mi:ss')
|| ': FINE CALCOLO SLA TERZA PARTE'
);
UTL_FILE.fflush (file_log);
UTL_FILE.fclose (file_log);
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ( 'Errore in CALCOLA_SLA_TERZEPARTI '
|| SQLERRM);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,139 @@
CREATE OR REPLACE PROCEDURE CALCOLA_SLA_TP_ONLINE (cod_errore IN OUT NUMBER)
IS
-- Purpose: Calcolo degli SLA Terze Parti
-- La procedura calcola gli SLA Terze Parti per tutte
-- le richieste contenute nella tabella MNP_DW_PORTING_ONLINE
-- MODIFICATION HISTORY
app_id_richiesta dwh.mnp_dw_porting_delta.id_richiesta%TYPE;
-- identificativo della richiesta di cui calcolare gli sla
sla3 NUMBER; -- numero di giorni di SLA3 totale
app_data_config_teorica DATE;
-- data di ricezione del file XML di porting
app_data_config_effettiva DATE;
-- data di invio del file di espletamento
app_data_cut_over_calc DATE; -- data di cut over calcolata
data_config_presunta DATE; -- data di configurazione presunta
dco_calc_ora DATE;
dco_conf_teorica_19 DATE;
file_log UTL_FILE.file_type; -- file di log
dir_out_log VARCHAR2 (200);
line_log VARCHAR2 (200);
var_stato_finale NUMBER;
-- variabile di appoggio per il codice dello sto finale
app_stato NUMBER; -- stato attuale della richiesta
app_data_stato_finale DATE; -- data di transizione nello stato
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta, stato, data_stato_finale,
data_configurazione_teorica, data_configurazione_effettiva,
data_cut_over_calc
FROM dwh.mnp_dw_porting_online;
BEGIN
cod_errore := 0;
dir_out_log := 'SLA';
file_log :=
UTL_FILE.fopen (dir_out_log,
'SLA_TERZAPARTE_ONLINE_'
|| TO_CHAR (SYSDATE, 'yyyyMMdd')
|| '.log',
'w'
);
UTL_FILE.put_line (file_log,
TO_CHAR (SYSDATE, 'yyyyMMdd HH24:mi:ss')
|| ': INIZIO CALCOLO SLA TERZA PARTE ONLINE'
);
UTL_FILE.fflush (file_log);
OPEN cur_richiesta;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta
INTO app_id_richiesta, app_stato, app_data_stato_finale,
app_data_config_teorica, app_data_config_effettiva,
app_data_cut_over_calc;
EXIT WHEN cur_richiesta%NOTFOUND;
-- Inizializzazione variabili
sla3 := 0;
IF app_data_config_teorica IS NOT NULL
THEN
-- Data cut over contenuta nel file XML di Porting con l'ora impostata alle 08:00
dco_calc_ora := app_data_cut_over_calc + 8 / 24;
-- Data di ricezione del file XML di Porting dall'operatore Recipient con l'ora impostata alle 19:00
dco_conf_teorica_19 := TRUNC (app_data_config_teorica) + 19 / 24;
IF app_data_config_teorica <=
dwh.fun_meno_ore_lavorative (dco_calc_ora, 39)
THEN
data_config_presunta :=
dwh.fun_piu_ore_lavorative (dco_calc_ora, 2);
ELSE
data_config_presunta :=
dwh.fun_piu_ore_lavorative (dco_conf_teorica_19, 39);
END IF;
BEGIN
SELECT DECODE (finale, 1, id_stato, 0, -1)
INTO var_stato_finale
FROM mnp.mnp_stato_porting
WHERE id_stato = app_stato;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
var_stato_finale := -1;
END;
-- Calcolo SLA3 totale
IF app_data_config_effettiva IS NULL
THEN
IF app_stato = var_stato_finale
THEN
app_data_config_effettiva := app_data_stato_finale;
ELSE
app_data_config_effettiva :=
dwh.fun_giorni_piu (TRUNC (SYSDATE), 1);
END IF;
END IF;
sla3 :=
dwh.fun_ore_lavorative (app_data_config_effettiva,
data_config_presunta
);
-- Verifico se gli SLA sono positivi
IF sla3 < 0
THEN
sla3 := 0;
END IF;
END IF;
UPDATE dwh.mnp_dw_porting_online d
SET d.sla_tre = sla3
WHERE d.id_richiesta = app_id_richiesta;
COMMIT;
END LOOP;
CLOSE cur_richiesta;
COMMIT;
UTL_FILE.put_line (file_log,
TO_CHAR (SYSDATE, 'yyyyMMdd HH24:mi:ss')
|| ': FINE CALCOLO SLA TERZA PARTE ONLINE'
);
UTL_FILE.fflush (file_log);
UTL_FILE.fclose (file_log);
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ( 'Errore in CALCOLA_SLA_TERZEPARTI ONLINE '
|| SQLERRM
);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,522 @@
CREATE OR REPLACE PROCEDURE CAL_SLA_ANALITICO_DONOR_3PARTI (
mese_in IN NUMBER,
anno_in IN NUMBER,
cod_errore IN OUT NUMBER
)
IS
-- Purpose: Calcolo degli SLA ANALITICI DONOR - 3PARTI
--
-- MODIFICATION HISTORY
-- M.Zagaria - C.Poccia 25/07/2004 Versione Iniziale
app_select varchar2(200);
app_c_aom dwh.mnp_dw_donor.aom_recipient%TYPE;
-- identificativo della richiesta di cui calcolare gli sla
app_aom_rec dwh.mnp_dw_donor.aom_recipient%TYPE;
app_id_richiesta dwh.mnp_dw_donor.id_richiesta%TYPE;
app_msisdn dwh.mnp_dw_donor.msisdn%TYPE;
app_tipo_richiesta VARCHAR2 (3); --- STD/HOC/TP
app_tipo_linea dwh.mnp_dw_donor.tipo_linea%TYPE;
app_marcaggio dwh.mnp_dw_donor.marcaggio%TYPE;
app_codfis_piva dwh.mnp_dw_donor.codice_fiscale_partita_iva%TYPE;
app_data_ric_richiesta DATE;
app_data_pic DATE;
app_sla0 dwh.mnp_dw_donor_sla.sla_zero_minore%TYPE;
app_data_invio_crm_bit DATE;
app_data_val_max DATE;
app_data_prima_val_max DATE;
app_data_val_eff DATE;
app_data_prima_val_eff DATE;
app_sla1 dwh.mnp_dw_donor_sla.sla_uno_minore%TYPE;
app_ric_crm_bit dwh.mnp_dw_donor.data_ricezione_da_ccrmbit%TYPE;
app_data_conf_teorica DATE;
app_data_conf_eff DATE;
app_data_cut_over_calc DATE;
app_data_cut_over_rec DATE;
app_data_cut_over_eff DATE;
app_sla2 dwh.mnp_dw_donor_sla.sla_due_minore%TYPE;
app_sla3 dwh.mnp_dw_porting_sla.sla_tre_minore%TYPE;
app_causale_rifiuto dwh.mnp_dw_donor.causale_rifiuto%TYPE;
mese_appo VARCHAR2(2);
-- variabile di appoggio per il codice dello sto finale
file_out UTL_FILE.file_type; -- file di log
dir_out VARCHAR2 (200);
line VARCHAR2 (200);
-----------------------------------------------------------------
-- Definizione cursore per l'estrazione degli AOM RECIPIENT da trattare
-----------------------------------------------------------------
CURSOR c_aom
IS
SELECT DISTINCT desc_olo
FROM mnp.mnp_olo
WHERE flag_terze_parti = 1;
-- Cursore per le richieste di cui calcolare gli SLA
-- DONOR STANDARD
CURSOR cur_richiesta
IS
SELECT d.id_richiesta
FROM mnp_dw_donor d, mnp_dw_donor_sla ds
WHERE d.aom_recipient = app_c_aom
AND ds.mese = mese_in
AND ds.anno = anno_in
AND d.id_richiesta = ds.id_richiesta;
-- Cursore per le richieste di cui calcolare gli SLA
-- DONOR PRJ-HOC
CURSOR cur_richiesta_hoc
IS
SELECT d.id_richiesta
FROM mnp_dw_donor_hoc d, mnp_dw_donor_hoc_sla ds
WHERE d.aom_recipient = app_c_aom
AND ds.mese = mese_in
AND ds.anno = anno_in
and d.id_richiesta = ds.id_richiesta;
-- Cursore per le richieste di cui calcolare gli SLA
-- TERZE PARTI
CURSOR cur_richiesta_tp
IS
SELECT d.id_richiesta
FROM mnp_dw_porting d, mnp_dw_porting_sla ds
WHERE d.aom_recipient = app_c_aom
AND ds.mese = mese_in
AND ds.anno = anno_in
and d.id_richiesta = ds.id_richiesta;
BEGIN
cod_errore := 0;
dir_out := 'REPORT_SLA';
select TO_CHAR (decode(length(mese_in),1,'0'||mese_in, mese_in)) into mese_appo from dual;
file_out := UTL_FILE.fopen (
dir_out,
'SLA_ANALITICO_DONOR_TERZE_PARTI_'
|| mese_appo|| TO_CHAR (anno_in)
|| '.csv',
'w'
);
UTL_FILE.put_line (
file_out,
'RICHIESTE DONOR (STANDARD/PROGETTI AD HOC)/ TERZA PARTE: MESE/ANNO DI RIFERIMENTO:'
|| mese_in
|| '/'
|| anno_in
|| ';'
);
UTL_FILE.put_line (
file_out,
'AOM_REC;ID_RICHIESTA;MSISDN;TIPO_RICHIESTA;TIPO_LINEA;'
|| 'MARCAGGIO ;CODFIS_PIVA;DATA_RIC_RICHIESTA;DATA_PIC;SLA0;DATA_INVIO_CRM_BIT;'
|| 'DATA_VAL_MAX;DATA_PRIMA_VAL_MAX;DATA_VAL_EFF;DATA_PRIMA_VAL_EFF;SLA1;'
|| 'RIC_CRM_BIT;DATA_CONF_TEORICA;DATA_CONF_EFF;DATA_CUT_OVER_CALC;'
|| 'DATA_CUT_OVER_REC;DATA_CUT_OVER_EFF;SLA2;SLA3;CAUSALE_RIFIUTO;'
);
OPEN c_aom;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH c_aom INTO app_c_aom;
EXIT WHEN c_aom%NOTFOUND;
-- Cursore per le richieste di cui calcolare gli SLA
-- DONOR STANDARD
OPEN cur_richiesta;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta INTO app_id_richiesta;
EXIT WHEN cur_richiesta%NOTFOUND;
-----------------------------------------------------------------
-- Estrazione dati richiesta per un AOM e per una determinata richiesta
--- DONOR STANDARD
-----------------------------------------------------------------
app_aom_rec := NULL;
app_msisdn := NULL;
app_tipo_richiesta := NULL;
app_tipo_linea := NULL;
app_marcaggio := NULL;
app_codfis_piva := NULL;
app_data_ric_richiesta := NULL;
app_data_pic := NULL;
app_sla0 := NULL;
app_data_invio_crm_bit := NULL;
app_data_val_max := NULL;
app_data_prima_val_max := NULL;
app_data_val_eff := NULL;
app_data_prima_val_eff := NULL;
app_sla1 := NULL;
app_ric_crm_bit := NULL;
app_data_conf_teorica := NULL;
app_data_conf_eff := NULL;
app_data_cut_over_calc := NULL;
app_data_cut_over_rec := NULL;
app_data_cut_over_eff := NULL;
app_sla2 := NULL;
app_sla3 := NULL;
app_causale_rifiuto := NULL;
app_select := '1';
SELECT aom_recipient, d.id_richiesta, msisdn,
'STD', tipo_linea, marcaggio,
codice_fiscale_partita_iva, data_ricezione_richiesta,
data_presa_in_carico, table_sla.sla0,
data_invio_ai_sistemi_commer, data_validazione_max,
NULL, data_validazione,
NULL, table_sla.sla1, data_ricezione_da_ccrmbit,
NULL, NULL,
data_cut_over_calc, NULL,
data_cut_over_eff, table_sla.sla2, NULL,
causale_rifiuto
INTO app_aom_rec, app_id_richiesta, app_msisdn,
app_tipo_richiesta, app_tipo_linea, app_marcaggio,
app_codfis_piva, app_data_ric_richiesta,
app_data_pic, app_sla0,
app_data_invio_crm_bit, app_data_val_max,
app_data_prima_val_max, app_data_val_eff,
app_data_prima_val_eff, app_sla1, app_ric_crm_bit,
app_data_conf_teorica, app_data_conf_eff,
app_data_cut_over_calc, app_data_cut_over_rec,
app_data_cut_over_eff, app_sla2, app_sla3,
app_causale_rifiuto
FROM mnp_dw_donor d,
(SELECT SUM (sla_zero_minore)
+ SUM (sla_zero_maggiore) AS sla0,
SUM (sla_uno_minore)
+ SUM (sla_uno_maggiore) AS sla1,
SUM (sla_due_minore)
+ SUM (sla_due_maggiore) AS sla2
FROM mnp_dw_donor_sla
WHERE mnp_dw_donor_sla.id_richiesta = app_id_richiesta
and mnp_dw_donor_sla.mese=mese_in and mnp_dw_donor_sla.anno=anno_in) table_sla
WHERE d.id_richiesta = app_id_richiesta;
UTL_FILE.put_line (
file_out,
app_aom_rec
|| ';'
|| app_id_richiesta
|| ';'
|| ''''
|| app_msisdn
|| ''''
|| ';'
|| app_tipo_richiesta
|| ';'
|| app_tipo_linea
|| ';'
|| app_marcaggio
|| ';'
|| app_codfis_piva
|| ';'
|| app_data_ric_richiesta
|| ';'
|| app_data_pic
|| ';'
|| app_sla0
|| ';'
|| app_data_invio_crm_bit
|| ';'
|| app_data_val_max
|| ';'
|| app_data_prima_val_max
|| ';'
|| app_data_val_eff
|| ';'
|| app_data_prima_val_eff
|| ';'
|| app_sla1
|| ';'
|| app_ric_crm_bit
|| ';'
|| app_data_conf_teorica
|| ';'
|| app_data_conf_eff
|| ';'
|| app_data_cut_over_calc
|| ';'
|| app_data_cut_over_rec
|| ';'
|| app_data_cut_over_eff
|| ';'
|| app_sla2
|| ';'
|| app_sla3
|| ';'
|| app_causale_rifiuto
|| ';'
);
END LOOP; -- richiesta
CLOSE cur_richiesta;
UTL_FILE.fflush (file_out);
OPEN cur_richiesta_hoc;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta_hoc INTO app_id_richiesta;
EXIT WHEN cur_richiesta_hoc%NOTFOUND;
-----------------------------------------------------------------
-- Estrazione dati richiesta per un AOM e per una determinata richiesta
--- DONOR PRJ-HOC
-----------------------------------------------------------------
app_aom_rec := NULL;
app_msisdn := NULL;
app_tipo_richiesta := NULL;
app_tipo_linea := NULL;
app_marcaggio := NULL;
app_codfis_piva := NULL;
app_data_ric_richiesta := NULL;
app_data_pic := NULL;
app_sla0 := NULL;
app_data_invio_crm_bit := NULL;
app_data_val_max := NULL;
app_data_prima_val_max := NULL;
app_data_val_eff := NULL;
app_data_prima_val_eff := NULL;
app_sla1 := NULL;
app_ric_crm_bit := NULL;
app_data_conf_teorica := NULL;
app_data_conf_eff := NULL;
app_data_cut_over_calc := NULL;
app_data_cut_over_rec := NULL;
app_data_cut_over_eff := NULL;
app_sla2 := NULL;
app_sla3 := NULL;
app_causale_rifiuto := NULL;
app_select := '2';
SELECT aom_recipient, d.id_richiesta, msisdn,
'HOC', tipo_linea, marcaggio,
codice_fiscale_partita_iva, data_ricezione_richiesta,
data_presa_in_carico, table_sla.sla0,
data_invio_ai_sistemi_commer, NULL,
data_validazione_max, NULL,
data_prima_validazione, table_sla.sla1,
data_ricezione_da_ccrmbit, NULL, NULL,
data_cut_over_calc, data_cut_over_calc,
data_cut_over_eff, table_sla.sla2, NULL,
causale_rifiuto
INTO app_aom_rec, app_id_richiesta, app_msisdn,
app_tipo_richiesta, app_tipo_linea, app_marcaggio,
app_codfis_piva, app_data_ric_richiesta,
app_data_pic, app_sla0,
app_data_invio_crm_bit, app_data_val_max,
app_data_prima_val_max, app_data_val_eff,
app_data_prima_val_eff, app_sla1,
app_ric_crm_bit, app_data_conf_teorica, app_data_conf_eff,
app_data_cut_over_calc, app_data_cut_over_rec,
app_data_cut_over_eff, app_sla2, app_sla3,
app_causale_rifiuto
FROM mnp_dw_donor_hoc d,
(SELECT SUM (sla_zero_minore)
+ SUM (sla_zero_maggiore) AS sla0,
SUM (sla_uno_minore)
+ SUM (sla_uno_maggiore) AS sla1,
SUM (sla_due_minore)
+ SUM (sla_due_maggiore) AS sla2
FROM mnp_dw_donor_hoc_sla
WHERE mnp_dw_donor_hoc_sla.id_richiesta = app_id_richiesta
and mnp_dw_donor_hoc_sla.mese=mese_in and mnp_dw_donor_hoc_sla.anno=anno_in) table_sla
WHERE d.id_richiesta = app_id_richiesta;
UTL_FILE.put_line (
file_out,
app_aom_rec
|| ';'
|| app_id_richiesta
|| ';'
|| ''''
|| app_msisdn
|| ''''
|| ';'
|| app_tipo_richiesta
|| ';'
|| app_tipo_linea
|| ';'
|| app_marcaggio
|| ';'
|| app_codfis_piva
|| ';'
|| app_data_ric_richiesta
|| ';'
|| app_data_pic
|| ';'
|| app_sla0
|| ';'
|| app_data_invio_crm_bit
|| ';'
|| app_data_val_max
|| ';'
|| app_data_prima_val_max
|| ';'
|| app_data_val_eff
|| ';'
|| app_data_prima_val_eff
|| ';'
|| app_sla1
|| ';'
|| app_ric_crm_bit
|| ';'
|| app_data_conf_teorica
|| ';'
|| app_data_conf_eff
|| ';'
|| app_data_cut_over_calc
|| ';'
|| app_data_cut_over_rec
|| ';'
|| app_data_cut_over_eff
|| ';'
|| app_sla2
|| ';'
|| app_sla3
|| ';'
|| app_causale_rifiuto
|| ';'
);
END LOOP; -- richiesta
CLOSE cur_richiesta_hoc;
OPEN cur_richiesta_tp;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta_tp INTO app_id_richiesta;
EXIT WHEN cur_richiesta_tp%NOTFOUND;
-----------------------------------------------------------------
-- Estrazione dati richiesta per un AOM e per una determinata richiesta
--- TERZE PARTI
-----------------------------------------------------------------
app_aom_rec := NULL;
app_msisdn := NULL;
app_tipo_richiesta := NULL;
app_tipo_linea := NULL;
app_marcaggio := NULL;
app_codfis_piva := NULL;
app_data_ric_richiesta := NULL;
app_data_pic := NULL;
app_sla0 := NULL;
app_data_invio_crm_bit := NULL;
app_data_val_max := NULL;
app_data_prima_val_max := NULL;
app_data_val_eff := NULL;
app_data_prima_val_eff := NULL;
app_sla1 := NULL;
app_ric_crm_bit := NULL;
app_data_conf_teorica := NULL;
app_data_conf_eff := NULL;
app_data_cut_over_calc := NULL;
app_data_cut_over_rec := NULL;
app_data_cut_over_eff := NULL;
app_sla2 := NULL;
app_sla3 := NULL;
app_causale_rifiuto := NULL;
app_select := '3-'||app_c_aom;
SELECT aom_recipient, d.id_richiesta, msisdn,
'TP', NULL, NULL,
NULL, data_ricezione_richiesta, NULL,
NULL, NULL, NULL,
NULL, NULL,
NULL, NULL, NULL,
data_configurazione_teorica, data_configurazione_effettiva,
data_cut_over_calc, NULL,
NULL, NULL, table_sla.sla3,
NULL
INTO app_aom_rec, app_id_richiesta, app_msisdn,
app_tipo_richiesta, app_tipo_linea, app_marcaggio,
app_codfis_piva, app_data_ric_richiesta, app_data_pic,
app_sla0, app_data_invio_crm_bit, app_data_val_max,
app_data_prima_val_max, app_data_val_eff,
app_data_prima_val_eff, app_sla1, app_ric_crm_bit,
app_data_conf_teorica, app_data_conf_eff,
app_data_cut_over_calc, app_data_cut_over_rec,
app_data_cut_over_eff, app_sla2, app_sla3,
app_causale_rifiuto
FROM mnp_dw_porting d,
(SELECT SUM (sla_tre_minore)
+ SUM (sla_tre_maggiore) AS sla3
FROM mnp_dw_porting_sla
WHERE mnp_dw_porting_sla.id_richiesta = app_id_richiesta
and mnp_dw_porting_sla.mese=mese_in and mnp_dw_porting_sla.anno=anno_in) table_sla
WHERE d.id_richiesta = app_id_richiesta;
UTL_FILE.put_line (
file_out,
app_aom_rec
|| ';'
|| app_id_richiesta
|| ';'
|| ''''
|| app_msisdn
|| ''''
|| ';'
|| app_tipo_richiesta
|| ';'
|| app_tipo_linea
|| ';'
|| app_marcaggio
|| ';'
|| app_codfis_piva
|| ';'
|| app_data_ric_richiesta
|| ';'
|| app_data_pic
|| ';'
|| app_sla0
|| ';'
|| app_data_invio_crm_bit
|| ';'
|| app_data_val_max
|| ';'
|| app_data_prima_val_max
|| ';'
|| app_data_val_eff
|| ';'
|| app_data_prima_val_eff
|| ';'
|| app_sla1
|| ';'
|| app_ric_crm_bit
|| ';'
|| app_data_conf_teorica
|| ';'
|| app_data_conf_eff
|| ';'
|| app_data_cut_over_calc
|| ';'
|| app_data_cut_over_rec
|| ';'
|| app_data_cut_over_eff
|| ';'
|| app_sla2
|| ';'
|| app_sla3
|| ';'
|| app_causale_rifiuto
|| ';'
);
END LOOP; -- richiesta
CLOSE cur_richiesta_tp;
END LOOP; --aom
CLOSE c_aom;
UTL_FILE.fflush (file_out);
UTL_FILE.fclose (file_out);
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line (
'Errore in REPORT_ANALITICO_SLA_DONOR_TERZE_PARTI : (SEL '||app_select||' ) - '
|| SQLERRM
);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,792 @@
CREATE OR REPLACE PROCEDURE CAL_SLA_ANALITICO_RECIPIENT (
mese_in IN NUMBER,
anno_in IN NUMBER,
cod_errore IN OUT NUMBER
)
IS
-- Purpose: Calcolo degli SLA ANALITICI RECIPIENT
--
-- MODIFICATION HISTORY
-- M.Zagaria - C.Poccia 25/07/2004 Versione Iniziale
app_c_aom mnp.mnp_olo.desc_olo%TYPE;
app_c_aom_tp mnp.mnp_olo.desc_olo%TYPE;
app_ind NUMBER (1);
app_aom_tp dwh.mnp_dw_rec_sla_terzeparti.aom_terze_parti%TYPE;
app_data_conf_teo_aom DATE;
app_data_eff_aom DATE;
app_sla3_aom dwh.mnp_dw_rec_sla_terzeparti.sla_tre_minore%TYPE;
-- identificativo della richiesta di cui calcolare gli sla
app_aom_don dwh.mnp_dw_rec.aom_donor%TYPE;
app_aom_tp_1 dwh.mnp_dw_rec_sla_terzeparti.aom_terze_parti%TYPE;
app_aom_tp_2 dwh.mnp_dw_rec_sla_terzeparti.aom_terze_parti%TYPE;
app_aom_tp_3 dwh.mnp_dw_rec_sla_terzeparti.aom_terze_parti%TYPE;
app_id_richiesta dwh.mnp_dw_rec.id_richiesta%TYPE;
app_msisdn dwh.mnp_dw_rec.msisdn%TYPE;
app_tipo_richiesta VARCHAR2 (5); --- STD/HOC/TACS
app_tipo_linea dwh.mnp_dw_rec.tipo_linea%TYPE;
app_data_ric_richiesta DATE;
app_data_invio_aom DATE;
app_data_pic DATE;
app_sla0 dwh.mnp_dw_rec_sla.sla_zero_minore%TYPE;
app_data_val_max DATE;
app_data_prima_val_max DATE;
app_data_val_eff DATE;
app_data_prima_val_eff DATE;
app_sla1 dwh.mnp_dw_rec_sla.sla_uno_minore%TYPE;
app_data_conf_teo_aom1 DATE;
app_data_conf_teo_aom2 DATE;
app_data_conf_teo_aom3 DATE;
app_data_eff_aom1 DATE;
app_data_eff_aom2 DATE;
app_data_eff_aom3 DATE;
app_data_cut_over_calc DATE;
app_data_cut_over_aom DATE;
app_data_esple_don DATE;
app_sla2 dwh.mnp_dw_rec_sla.sla_due_minore%TYPE;
app_sla3_aom1 dwh.mnp_dw_rec_sla_terzeparti.sla_tre_minore%TYPE;
app_sla3_aom2 dwh.mnp_dw_rec_sla_terzeparti.sla_tre_minore%TYPE;
app_sla3_aom3 dwh.mnp_dw_rec_sla_terzeparti.sla_tre_minore%TYPE;
app_causale_rifiuto dwh.mnp_dw_rec.causale_rifiuto%TYPE;
mese_appo VARCHAR2(2);
-- variabile di appoggio per il codice dello sto finale
file_out UTL_FILE.file_type; -- file di log
dir_out VARCHAR2 (200);
line VARCHAR2 (200);
-----------------------------------------------------------------
-- Definizione cursore per l'estrazione degli AOM RECIPIENT da trattare
-----------------------------------------------------------------
CURSOR c_aom
IS
SELECT DISTINCT desc_olo
FROM mnp.mnp_olo
WHERE flag_terze_parti = 1;
-- Cursore per le richieste di cui calcolare gli SLA
-- RECIPIENT STANDARD
CURSOR cur_richiesta
IS
SELECT r.id_richiesta
FROM mnp_dw_rec r, mnp_dw_rec_sla rs
WHERE r.aom_donor = app_c_aom
AND rs.mese = mese_in
AND rs.anno = anno_in
AND r.id_richiesta = rs.id_richiesta
UNION
SELECT r.id_richiesta
FROM mnp_dw_rec r, mnp_dw_rec_sla_terzeparti rs
WHERE r.aom_donor = app_c_aom
AND rs.mese = mese_in
AND rs.anno = anno_in
AND r.id_richiesta = rs.id_richiesta;
-- Cursore per le richieste di cui calcolare gli SLA
-- RECIPIENT AD HOC
CURSOR cur_richiesta_hoc
IS
SELECT r.id_richiesta
FROM mnp_dw_rec_hoc r, mnp_dw_rec_hoc_sla rs
WHERE r.aom_donor = app_c_aom
AND rs.mese = mese_in
AND rs.anno = anno_in
AND r.id_richiesta = rs.id_richiesta
UNION
SELECT r.id_richiesta
FROM mnp_dw_rec_hoc r, mnp_dw_rec_hoc_sla_terzeparti rs
WHERE r.aom_donor = app_c_aom
AND rs.mese = mese_in
AND rs.anno = anno_in
AND r.id_richiesta = rs.id_richiesta;
-- Cursore per le richieste di cui calcolare gli SLA
-- RECIPIENT Scivolo TACS
CURSOR cur_richiesta_tacs
IS
SELECT distinct (r.id_richiesta)
FROM mnp_dw_rec_tacs r, mnp_dw_rec_tacs_sla_terzeparti rs
WHERE r.aom_donor = app_c_aom
AND rs.mese = mese_in
AND rs.anno = anno_in
AND r.id_richiesta = rs.id_richiesta;
-- Calcolo SLA3 Recipient Standard / HOC / TACS
CURSOR c_aom_tp
IS
SELECT DISTINCT desc_olo
FROM mnp.mnp_olo
WHERE flag_terze_parti = 1 AND desc_olo <> app_c_aom;
BEGIN
cod_errore := 0;
dir_out := 'REPORT_SLA';
select TO_CHAR (decode(length(mese_in),1,'0'||mese_in, mese_in)) into mese_appo from dual;
file_out := UTL_FILE.fopen (
dir_out,
'SLA_ANALITICO_RECIPIENT_'
|| mese_appo || TO_CHAR (anno_in)
|| '.csv',
'w'
);
UTL_FILE.put_line (
file_out,
'RICHIESTE RECIPIENT (STANDARD/PROGETTI AD HOC/TACS): MESE/ANNO DI RIFERIMENTO:'
|| mese_in
|| '/'
|| anno_in
|| ';'
);
UTL_FILE.put_line (
file_out,
'AOM_DON;AOM_TP_1;AOM_TP_2;AOM_TP_3;ID_RICHIESTA;MSISDN;TIPO_RICHIESTA;'
|| 'TIPO_LINEA;DATA_RIC_RICHIESTA;DATA_INVIO_AOM;DATA_PIC;SLA0;DATA_VAL_MAX;'
|| 'DATA_PRIMA_VAL_MAX;DATA_VAL_EFF;DATA_PRIMA_VAL_EFF;SLA1;DATA_CONF_TEO_AOM1;'
|| 'DATA_CONF_TEO_AOM2;DATA_CONF_TEO_AOM3;DATA_EFF_AOM1;DATA_EFF_AOM2;DATA_EFF_AOM3;'
|| 'DATA_CUT_OVER_CALC;DATA_CUT_OVER_AOM;DATA_ESPLE_DON;SLA2;SLA3_AOM1;SLA3_AOM2;'
|| 'SLA3_AOM3;CAUSALE_RIFIUTO;'
);
OPEN c_aom;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH c_aom INTO app_c_aom;
EXIT WHEN c_aom%NOTFOUND;
OPEN cur_richiesta;
-----------------------------------------------------------------
-- Estrazione dati richiesta per un AOM e per una determinata richiesta
--- RECIPIENT STANDARD
-----------------------------------------------------------------
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta INTO app_id_richiesta;
EXIT WHEN cur_richiesta%NOTFOUND;
app_aom_don := NULL;
app_aom_tp_1 := NULL;
app_aom_tp_2 := NULL;
app_aom_tp_3 := NULL;
app_msisdn := NULL;
app_tipo_richiesta := NULL;
app_tipo_linea := NULL;
app_data_ric_richiesta := NULL;
app_data_invio_aom := NULL;
app_data_pic := NULL;
app_sla0 := NULL;
app_data_val_max := NULL;
app_data_prima_val_max := NULL;
app_data_val_eff := NULL;
app_data_prima_val_eff := NULL;
app_sla1 := NULL;
app_data_conf_teo_aom1 := NULL;
app_data_conf_teo_aom2 := NULL;
app_data_conf_teo_aom3 := NULL;
app_data_eff_aom1 := NULL;
app_data_eff_aom2 := NULL;
app_data_eff_aom3 := NULL;
app_data_cut_over_calc := NULL;
app_data_cut_over_aom := NULL;
app_data_esple_don := NULL;
app_sla2 := NULL;
app_sla3_aom1 := NULL;
app_sla3_aom2 := NULL;
app_sla3_aom3 := NULL;
app_causale_rifiuto := NULL;
SELECT aom_donor, r.id_richiesta, msisdn,
'STD', tipo_linea, data_ricezione_richiesta,
data_invio_ad_aom, data_presa_in_carico,
DECODE (sla0, NULL, 0, sla0) AS sla0, data_validazione_max,
NULL, data_validazione,
NULL, DECODE (sla1, NULL, 0, sla1) AS sla1, NULL,
data_cut_over_aom, data_espletamento_donating,
DECODE (sla2, NULL, 0, sla2) AS sla2, causale_rifiuto
INTO app_aom_don, app_id_richiesta, app_msisdn,
app_tipo_richiesta, app_tipo_linea, app_data_ric_richiesta,
app_data_invio_aom, app_data_pic,
app_sla0, app_data_val_max,
app_data_prima_val_max, app_data_val_eff,
app_data_prima_val_eff, app_sla1, app_data_cut_over_calc,
app_data_cut_over_aom, app_data_esple_don,
app_sla2, app_causale_rifiuto
FROM mnp_dw_rec r,
(SELECT SUM (sla_zero_minore)
+ SUM (sla_zero_maggiore) AS sla0,
SUM (sla_uno_minore)
+ SUM (sla_uno_maggiore) AS sla1,
SUM (sla_due_minore)
+ SUM (sla_due_maggiore) AS sla2
FROM mnp_dw_rec_sla
WHERE mnp_dw_rec_sla.id_richiesta = app_id_richiesta
and mnp_dw_rec_sla.mese=mese_in and mnp_dw_rec_sla.anno=anno_in) sla_donating
WHERE r.id_richiesta = app_id_richiesta;
app_ind := 1;
OPEN c_aom_tp;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH c_aom_tp INTO app_c_aom_tp;
EXIT WHEN c_aom_tp%NOTFOUND;
BEGIN
-- slq clacolo sla
SELECT tp.aom_terze_parti, data_configurazione_teorica,
data_configurazione_effettiva,
DECODE (
SUM (sla_tre_minore)
+ SUM (sla_tre_maggiore),
NULL, 0,
SUM (sla_tre_minore)
+ SUM (sla_tre_maggiore)
) AS sla3
INTO app_aom_tp, app_data_conf_teo_aom,
app_data_eff_aom,
app_sla3_aom
FROM mnp_dw_rec_terzeparti tp,
mnp_dw_rec_sla_terzeparti sla_tp
WHERE tp.id_richiesta = app_id_richiesta
AND tp.id_richiesta = sla_tp.id_richiesta
AND sla_tp.aom_terze_parti = tp.aom_terze_parti
AND tp.aom_terze_parti = app_c_aom_tp
and sla_tp.mese=mese_in and sla_tp.anno=anno_in
GROUP BY tp.aom_terze_parti,
data_configurazione_teorica,
data_configurazione_effettiva;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
app_sla3_aom := -1;
END;
IF (app_sla3_aom > 0)
THEN
IF (app_ind = 1)
THEN
app_aom_tp_1 := app_aom_tp;
app_data_conf_teo_aom1 := app_data_conf_teo_aom;
app_data_eff_aom1 := app_data_eff_aom;
app_sla3_aom1 := app_sla3_aom;
ELSE
IF (app_ind = 2)
THEN
app_aom_tp_2 := app_aom_tp;
app_data_conf_teo_aom2 := app_data_conf_teo_aom;
app_data_eff_aom2 := app_data_eff_aom;
app_sla3_aom2 := app_sla3_aom;
END IF;
END IF;
END IF;
app_ind := app_ind
+ 1;
END LOOP; -- C_Aom_tp
CLOSE c_aom_tp;
UTL_FILE.put_line (
file_out,
app_aom_don
|| ';'
|| app_aom_tp_1
|| ';'
|| app_aom_tp_2
|| ';'
|| app_aom_tp_3
|| ';'
|| ''''
|| app_id_richiesta
|| ''''
|| ';'
|| ''''
|| app_msisdn
|| ''''
|| ';'
|| app_tipo_richiesta
|| ';'
|| app_tipo_linea
|| ';'
|| app_data_ric_richiesta
|| ';'
|| app_data_invio_aom
|| ';'
|| app_data_pic
|| ';'
|| app_sla0
|| ';'
|| app_data_val_max
|| ';'
|| app_data_prima_val_max
|| ';'
|| app_data_val_eff
|| ';'
|| app_data_prima_val_eff
|| ';'
|| app_sla1
|| ';'
|| app_data_conf_teo_aom1
|| ';'
|| app_data_conf_teo_aom2
|| ';'
|| app_data_conf_teo_aom3
|| ';'
|| app_data_eff_aom1
|| ';'
|| app_data_eff_aom2
|| ';'
|| app_data_eff_aom3
|| ';'
|| app_data_cut_over_calc
|| ';'
|| app_data_cut_over_aom
|| ';'
|| app_data_esple_don
|| ';'
|| app_sla2
|| ';'
|| app_sla3_aom1
|| ';'
|| app_sla3_aom2
|| ';'
|| app_sla3_aom3
|| ';'
|| app_causale_rifiuto
|| ';'
);
END LOOP; -- richiesta
CLOSE cur_richiesta;
UTL_FILE.fflush (file_out);
-----------------------------------------------------------------
-- Estrazione dati richiesta per un AOM e per una determinata richiesta
--- RECIPIENT HOC
-----------------------------------------------------------------
OPEN cur_richiesta_hoc;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta_hoc INTO app_id_richiesta;
EXIT WHEN cur_richiesta_hoc%NOTFOUND;
app_aom_don := NULL;
app_aom_tp_1 := NULL;
app_aom_tp_2 := NULL;
app_aom_tp_3 := NULL;
app_msisdn := NULL;
app_tipo_richiesta := NULL;
app_tipo_linea := NULL;
app_data_ric_richiesta := NULL;
app_data_invio_aom := NULL;
app_data_pic := NULL;
app_sla0 := NULL;
app_data_val_max := NULL;
app_data_prima_val_max := NULL;
app_data_val_eff := NULL;
app_data_prima_val_eff := NULL;
app_sla1 := NULL;
app_data_conf_teo_aom1 := NULL;
app_data_conf_teo_aom2 := NULL;
app_data_conf_teo_aom3 := NULL;
app_data_eff_aom1 := NULL;
app_data_eff_aom2 := NULL;
app_data_eff_aom3 := NULL;
app_data_cut_over_calc := NULL;
app_data_cut_over_aom := NULL;
app_data_esple_don := NULL;
app_sla2 := NULL;
app_sla3_aom1 := NULL;
app_sla3_aom2 := NULL;
app_sla3_aom3 := NULL;
app_causale_rifiuto := NULL;
SELECT aom_donor, r.id_richiesta, msisdn,
'HOC', tipo_linea, data_ricezione_richiesta,
data_invio_ad_aom, data_presa_in_carico,
DECODE (sla0, NULL, 0, sla0) AS sla0, NULL,
data_validazione_max, NULL,
data_validazione, DECODE (sla1, NULL, 0, sla1) AS sla1, NULL,
data_cut_over_aom, data_espletamento_donating,
DECODE (sla2, NULL, 0, sla2) AS sla2, causale_rifiuto
INTO app_aom_don, app_id_richiesta, app_msisdn,
app_tipo_richiesta, app_tipo_linea, app_data_ric_richiesta,
app_data_invio_aom, app_data_pic,
app_sla0, app_data_val_max,
app_data_prima_val_max, app_data_val_eff,
app_data_prima_val_eff, app_sla1, app_data_cut_over_calc,
app_data_cut_over_aom, app_data_esple_don,
app_sla2, app_causale_rifiuto
FROM mnp_dw_rec_hoc r,
(SELECT SUM (sla_zero_minore)
+ SUM (sla_zero_maggiore) AS sla0,
SUM (sla_uno_minore)
+ SUM (sla_uno_maggiore) AS sla1,
SUM (sla_due_minore)
+ SUM (sla_due_maggiore) AS sla2
FROM mnp_dw_rec_hoc_sla
WHERE mnp_dw_rec_hoc_sla.id_richiesta = app_id_richiesta
and mnp_dw_rec_hoc_sla.mese=mese_in and mnp_dw_rec_hoc_sla.anno=anno_in) sla_donating
WHERE r.id_richiesta = app_id_richiesta;
app_ind := 1;
OPEN c_aom_tp;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH c_aom_tp INTO app_c_aom_tp;
EXIT WHEN c_aom_tp%NOTFOUND;
BEGIN
-- sla clacolo sla
SELECT tp.aom_terze_parti, data_configurazione_teorica,
data_configurazione_effettiva,
DECODE (
SUM (sla_tre_minore)
+ SUM (sla_tre_maggiore),
NULL, 0,
SUM (sla_tre_minore)
+ SUM (sla_tre_maggiore)
) AS sla3
INTO app_aom_tp, app_data_conf_teo_aom,
app_data_eff_aom,
app_sla3_aom
FROM mnp_dw_rec_hoc_terzeparti tp,
mnp_dw_rec_hoc_sla_terzeparti sla_tp
WHERE tp.id_richiesta = app_id_richiesta
AND tp.id_richiesta = sla_tp.id_richiesta
AND tp.aom_terze_parti = app_c_aom_tp
AND sla_tp.aom_terze_parti = tp.aom_terze_parti
and sla_tp.mese=mese_in and sla_tp.anno=anno_in
GROUP BY tp.aom_terze_parti,
data_configurazione_teorica,
data_configurazione_effettiva;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
app_sla3_aom := -1;
END;
IF (app_sla3_aom > 0)
THEN
IF (app_ind = 1)
THEN
app_aom_tp_1 := app_aom_tp;
app_data_conf_teo_aom1 := app_data_conf_teo_aom;
app_data_eff_aom1 := app_data_eff_aom;
app_sla3_aom1 := app_sla3_aom;
ELSE
IF (app_ind = 2)
THEN
app_aom_tp_2 := app_aom_tp;
app_data_conf_teo_aom2 := app_data_conf_teo_aom;
app_data_eff_aom2 := app_data_eff_aom;
app_sla3_aom2 := app_sla3_aom;
END IF;
END IF;
END IF;
app_ind := app_ind
+ 1;
END LOOP; -- C_Aom_tp
CLOSE c_aom_tp;
UTL_FILE.put_line (
file_out,
app_aom_don
|| ';'
|| app_aom_tp_1
|| ';'
|| app_aom_tp_2
|| ';'
|| app_aom_tp_3
|| ';'
|| ''''
|| app_id_richiesta
|| ''''
|| ';'
|| ''''
|| app_msisdn
|| ''''
|| ';'
|| app_tipo_richiesta
|| ';'
|| app_tipo_linea
|| ';'
|| app_data_ric_richiesta
|| ';'
|| app_data_invio_aom
|| ';'
|| app_data_pic
|| ';'
|| app_sla0
|| ';'
|| app_data_val_max
|| ';'
|| app_data_prima_val_max
|| ';'
|| app_data_val_eff
|| ';'
|| app_data_prima_val_eff
|| ';'
|| app_sla1
|| ';'
|| app_data_conf_teo_aom1
|| ';'
|| app_data_conf_teo_aom2
|| ';'
|| app_data_conf_teo_aom3
|| ';'
|| app_data_eff_aom1
|| ';'
|| app_data_eff_aom2
|| ';'
|| app_data_eff_aom3
|| ';'
|| app_data_cut_over_calc
|| ';'
|| app_data_cut_over_aom
|| ';'
|| app_data_esple_don
|| ';'
|| app_sla2
|| ';'
|| app_sla3_aom1
|| ';'
|| app_sla3_aom2
|| ';'
|| app_sla3_aom3
|| ';'
|| app_causale_rifiuto
|| ';'
);
END LOOP; -- richiesta
CLOSE cur_richiesta_hoc;
UTL_FILE.fflush (file_out);
END LOOP; --aom
CLOSE c_aom;
-----------------------------------------------------------------
-- Estrazione dati richiesta per un AOM e per una determinata richiesta
--- RECIPIENT SCIVOLO TACS
-----------------------------------------------------------------
app_c_aom := 'TIMT';
OPEN cur_richiesta_tacs;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta_tacs INTO app_id_richiesta;
EXIT WHEN cur_richiesta_tacs%NOTFOUND;
app_aom_don := NULL;
app_aom_tp_1 := NULL;
app_aom_tp_2 := NULL;
app_aom_tp_3 := NULL;
app_msisdn := NULL;
app_tipo_richiesta := NULL;
app_tipo_linea := NULL;
app_data_ric_richiesta := NULL;
app_data_invio_aom := NULL;
app_data_pic := NULL;
app_sla0 := NULL;
app_data_val_max := NULL;
app_data_prima_val_max := NULL;
app_data_val_eff := NULL;
app_data_prima_val_eff := NULL;
app_sla1 := NULL;
app_data_conf_teo_aom1 := NULL;
app_data_conf_teo_aom2 := NULL;
app_data_conf_teo_aom3 := NULL;
app_data_eff_aom1 := NULL;
app_data_eff_aom2 := NULL;
app_data_eff_aom3 := NULL;
app_data_cut_over_calc := NULL;
app_data_cut_over_aom := NULL;
app_data_esple_don := NULL;
app_sla2 := NULL;
app_sla3_aom1 := NULL;
app_sla3_aom2 := NULL;
app_sla3_aom3 := NULL;
app_causale_rifiuto := NULL;
SELECT aom_donor, r.id_richiesta, msisdn, 'TACS',
tipo_linea, data_ricezione_richiesta, NULL,
NULL, NULL, NULL,
NULL, NULL,
NULL, NULL, data_cut_over_calc,
NULL, NULL, NULL,
NULL
INTO app_aom_don, app_id_richiesta, app_msisdn, app_tipo_richiesta,
app_tipo_linea, app_data_ric_richiesta, app_data_invio_aom,
app_data_pic, app_sla0, app_data_val_max,
app_data_prima_val_max, app_data_val_eff,
app_data_prima_val_eff, app_sla1, app_data_cut_over_calc,
app_data_cut_over_aom, app_data_esple_don, app_sla2,
app_causale_rifiuto
FROM mnp_dw_rec_tacs r
WHERE r.id_richiesta = app_id_richiesta;
app_ind := 1;
OPEN c_aom_tp;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH c_aom_tp INTO app_c_aom_tp;
EXIT WHEN c_aom_tp%NOTFOUND;
BEGIN
-- slq clacolo sla
SELECT tp.aom_terze_parti, data_configurazione_teorica,
data_configurazione_effettiva,
DECODE (
SUM (sla_tre_minore)
+ SUM (sla_tre_maggiore),
NULL, 0,
SUM (sla_tre_minore)
+ SUM (sla_tre_maggiore)
) AS sla3
INTO app_aom_tp, app_data_conf_teo_aom,
app_data_eff_aom,
app_sla3_aom
FROM mnp_dw_rec_tacs_terzeparti tp,
mnp_dw_rec_tacs_sla_terzeparti sla_tp
WHERE tp.id_richiesta = app_id_richiesta
AND tp.id_richiesta = sla_tp.id_richiesta
AND tp.aom_terze_parti = app_c_aom_tp
AND sla_tp.aom_terze_parti = tp.aom_terze_parti
and sla_tp.mese=mese_in and sla_tp.anno=anno_in
GROUP BY tp.aom_terze_parti,
data_configurazione_teorica,
data_configurazione_effettiva;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
app_sla3_aom := -1;
END;
IF (app_sla3_aom > 0)
THEN
IF (app_ind = 1)
THEN
app_aom_tp_1 := app_aom_tp;
app_data_conf_teo_aom1 := app_data_conf_teo_aom;
app_data_eff_aom1 := app_data_eff_aom;
app_sla3_aom1 := app_sla3_aom;
ELSE
IF (app_ind = 2)
THEN
app_aom_tp_2 := app_aom_tp;
app_data_conf_teo_aom2 := app_data_conf_teo_aom;
app_data_eff_aom2 := app_data_eff_aom;
app_sla3_aom2 := app_sla3_aom;
ELSE
IF (app_ind = 3)
THEN
app_aom_tp_3 := app_aom_tp;
app_data_conf_teo_aom3 := app_data_conf_teo_aom;
app_data_eff_aom3 := app_data_eff_aom;
app_sla3_aom3 := app_sla3_aom;
END IF;
END IF;
END IF;
END IF;
app_ind := app_ind
+ 1;
END LOOP; -- C_Aom_tp
CLOSE c_aom_tp;
UTL_FILE.put_line (
file_out,
app_aom_don
|| ';'
|| app_aom_tp_1
|| ';'
|| app_aom_tp_2
|| ';'
|| app_aom_tp_3
|| ';'
|| ''''
|| app_id_richiesta
|| ''''
|| ';'
|| ''''
|| app_msisdn
|| ''''
|| ';'
|| app_tipo_richiesta
|| ';'
|| app_tipo_linea
|| ';'
|| app_data_ric_richiesta
|| ';'
|| app_data_invio_aom
|| ';'
|| app_data_pic
|| ';'
|| app_sla0
|| ';'
|| app_data_val_max
|| ';'
|| app_data_prima_val_max
|| ';'
|| app_data_val_eff
|| ';'
|| app_data_prima_val_eff
|| ';'
|| app_sla1
|| ';'
|| app_data_conf_teo_aom1
|| ';'
|| app_data_conf_teo_aom2
|| ';'
|| app_data_conf_teo_aom3
|| ';'
|| app_data_eff_aom1
|| ';'
|| app_data_eff_aom2
|| ';'
|| app_data_eff_aom3
|| ';'
|| app_data_cut_over_calc
|| ';'
|| app_data_cut_over_aom
|| ';'
|| app_data_esple_don
|| ';'
|| app_sla2
|| ';'
|| app_sla3_aom1
|| ';'
|| app_sla3_aom2
|| ';'
|| app_sla3_aom3
|| ';'
|| app_causale_rifiuto
|| ';'
);
END LOOP; -- richiesta
CLOSE cur_richiesta_tacs;
---------- chiusura file
UTL_FILE.fflush (file_out);
UTL_FILE.fclose (file_out);
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line (
'Errore in REPORT_ANALITICO_SLA_RECIPIENT '
|| SQLERRM
);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,50 @@
CREATE OR REPLACE FUNCTION DONOR_PORTING_ONLINE_ID
RETURN NUMBER
IS
--
-- To modify this template, edit file FUNC.TXT in TEMPLATE
-- directory of SQL Navigator
--
-- Purpose: Briefly explain the functionality of the function
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- --------- ------ -------------------------------------------
errore NUMBER (1);
-- Declare program variables as shown above
BEGIN
errore := 0;
IF errore = 0
THEN
dwh.update_donor_online_id (errore);
END IF;
IF errore = 0
THEN
dwh.update_donor_hoc_online_id (errore);
END IF;
IF errore = 0
THEN
dwh.update_porting_online_id (errore);
END IF;
IF errore = 0
THEN
dwh.sla_donor_3parti_on_demand (errore);
END IF;
RETURN errore;
EXCEPTION
WHEN OTHERS
THEN
errore := 1;
DBMS_OUTPUT.put_line (
'Errore in DONOR_PORTING_ONLINE_ID '
|| SQLERRM
);
RETURN errore;
END;
/

View File

@@ -0,0 +1,50 @@
CREATE OR REPLACE FUNCTION DONOR_PORTING_ONLINE_MSISDN
RETURN NUMBER
IS
--
-- To modify this template, edit file FUNC.TXT in TEMPLATE
-- directory of SQL Navigator
--
-- Purpose: Briefly explain the functionality of the function
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- --------- ------ -------------------------------------------
errore NUMBER (1);
-- Declare program variables as shown above
BEGIN
errore := 0;
IF errore = 0
THEN
dwh.update_donor_online_msisdn (errore);
END IF;
IF errore = 0
THEN
dwh.update_donor_hoc_online_msisdn (errore);
END IF;
IF errore = 0
THEN
dwh.update_porting_online_msisdn (errore);
END IF;
IF errore = 0
THEN
dwh.sla_donor_3parti_on_demand (errore);
END IF;
RETURN errore;
EXCEPTION
WHEN OTHERS
THEN
errore := 1;
DBMS_OUTPUT.put_line (
'Errore in DONOR_PORTING_ONLINE_MSISDN '
|| SQLERRM
);
RETURN errore;
END;
/

View File

@@ -0,0 +1,38 @@
CREATE OR REPLACE FUNCTION FUN_DATE_FESTIVE (data_in IN DATE)
RETURN DATE
-- Se data_in è lavorativo restituisce data_in
-- Se data_in è festivo restituisce il primo giorno lavorativo precedente
IS
appo_settimana VARCHAR2 (20) := NULL;
appo_data DATE := NULL;
appo_id_prog mnp.mnp_date_festive.id_prog%TYPE;
BEGIN
appo_data := data_in;
appo_settimana := UPPER (TO_CHAR (appo_data, 'day'));
IF RTRIM (appo_settimana) = 'SATURDAY'
OR RTRIM (appo_settimana) = 'SABATO'
OR RTRIM (appo_settimana) = 'SUNDAY'
OR RTRIM (appo_settimana) = 'DOMENICA'
THEN
appo_data := dwh.fun_date_festive (appo_data - 1);
END IF;
BEGIN
SELECT id_prog
INTO appo_id_prog
FROM mnp.mnp_date_festive
WHERE TRUNC (data_festiva) = TRUNC (appo_data)
AND rownum <2;
appo_data := dwh.fun_date_festive (appo_data - 1);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
RETURN appo_data;
END;
RETURN appo_data;
END fun_date_festive;
/

View File

@@ -0,0 +1,38 @@
CREATE OR REPLACE FUNCTION FUN_DATE_FESTIVE_SUCC (data_in IN DATE)
RETURN DATE
-- Se data_in e lavorativo restituisce data_in
-- Se data_in e festivo restituisce il primo giorno lavorativo successivo
IS
appo_settimana VARCHAR2 (20) := NULL;
appo_data DATE := NULL;
appo_id_prog mnp.mnp_date_festive.id_prog%TYPE;
BEGIN
appo_data := data_in;
appo_settimana := UPPER (TO_CHAR (appo_data, 'day'));
IF RTRIM (appo_settimana) = 'SATURDAY'
OR RTRIM (appo_settimana) = 'SABATO'
OR RTRIM (appo_settimana) = 'SUNDAY'
OR RTRIM (appo_settimana) = 'DOMENICA'
THEN
appo_data := dwh.fun_date_festive_succ (appo_data + 1);
END IF;
BEGIN
SELECT id_prog
INTO appo_id_prog
FROM mnp.mnp_date_festive
WHERE TRUNC (data_festiva) = TRUNC (appo_data)
AND rownum <2;
appo_data := dwh.fun_date_festive_succ (appo_data + 1);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
RETURN appo_data;
END;
RETURN appo_data;
END fun_date_festive_succ;
/

View File

@@ -0,0 +1,24 @@
CREATE OR REPLACE FUNCTION FUN_GIORNI_LAVORATIVI (data_finale IN DATE, data_iniziale IN DATE)
RETURN NUMBER
-- Restituisce il numero di giorni lavorativi tra data_iniziale e data_finale
IS
appo_giorni NUMBER := NULL;
appo_data_iniziale DATE := dwh.fun_date_festive_succ (data_iniziale);
appo_data_finale DATE := dwh.fun_date_festive_succ (data_finale);
BEGIN
IF TRUNC (appo_data_finale) > TRUNC (appo_data_iniziale)
THEN
SELECT TRUNC (appo_data_finale)
- TRUNC (appo_data_iniziale)
- SUM (DECODE (tip_gio, 'F', 1, 'P', 1, 0))
INTO appo_giorni
FROM mnp.s_dim_tempo d
WHERE d.DATA >= TRUNC (appo_data_iniziale)
AND d.DATA <= TRUNC (appo_data_finale);
ELSE
appo_giorni := 0;
END IF;
RETURN appo_giorni;
END fun_giorni_lavorativi;
/

View File

@@ -0,0 +1,18 @@
CREATE OR REPLACE FUNCTION FUN_GIORNI_MENO (data_in IN DATE, giorni IN NUMBER)
RETURN DATE
-- Sottrae a data_in un numero giorni di giorni lavorativi
IS
appo_data DATE := NULL;
appo_giorni NUMBER := giorni;
BEGIN
appo_data := data_in;
FOR j IN 1 .. appo_giorni
LOOP
appo_data := dwh.fun_date_festive (appo_data - 1);
END LOOP;
RETURN appo_data;
END fun_giorni_meno;
/

View File

@@ -0,0 +1,18 @@
CREATE OR REPLACE FUNCTION FUN_GIORNI_PIU (data_in IN DATE, giorni IN NUMBER)
RETURN DATE
-- Aggiunge a data_in un numero giorni di giorni lavorativi
IS
appo_data DATE := NULL;
appo_giorni NUMBER := giorni;
BEGIN
appo_data := data_in;
FOR j IN 1 .. appo_giorni
LOOP
appo_data := dwh.fun_date_festive_succ (appo_data + 1);
END LOOP;
RETURN appo_data;
END fun_giorni_piu;
/

View File

@@ -0,0 +1,28 @@
CREATE OR REPLACE FUNCTION FUN_MENO_ORE_LAVORATIVE (data_iniziale IN DATE, ore IN NUMBER)
RETURN DATE
-- Toglie a data_iniziale un numero ore di ore lavorative
IS
appo_data DATE;
appo_resto NUMBER;
appo_ora NUMBER;
appo_giorni NUMBER;
n_ore NUMBER := ore;
BEGIN
appo_ora := TO_NUMBER (TO_CHAR (data_iniziale, 'HH24'));
IF n_ore < appo_ora
THEN
appo_data := data_iniziale - (n_ore / 24);
ELSE
n_ore := n_ore - appo_ora;
appo_data := data_iniziale - (appo_ora / 24);
appo_giorni := FLOOR (n_ore / 24);
appo_resto := n_ore - appo_giorni * 24;
appo_data := dwh.fun_giorni_meno (appo_data, appo_giorni);
appo_data := dwh.fun_date_festive (appo_data - (appo_resto / 24));
END IF;
RETURN appo_data;
END fun_meno_ore_lavorative;
/

View File

@@ -0,0 +1,40 @@
CREATE OR REPLACE FUNCTION FUN_ORE_LAVORATIVE (data_finale IN DATE, data_iniziale IN DATE)
RETURN NUMBER
-- Restituisce il numero di ore lavorative tra data_iniziale e data_finale
IS
appo_ore NUMBER;
appo_giorni NUMBER;
appo_ore_iniziali NUMBER;
appo_ore_finali NUMBER;
appo_min_finali NUMBER;
appo_min_iniziali NUMBER;
BEGIN
appo_ore := 0;
IF data_finale > data_iniziale
THEN
appo_giorni := dwh.fun_giorni_lavorativi (data_finale, data_iniziale);
IF appo_giorni > 0
THEN
appo_ore := appo_giorni * 24;
END IF;
appo_ore_iniziali := TO_NUMBER (TO_CHAR (data_iniziale, 'HH24'));
appo_ore_finali := TO_NUMBER (TO_CHAR (data_finale, 'HH24'));
appo_ore := appo_ore + appo_ore_finali - appo_ore_iniziali;
appo_min_iniziali := TO_NUMBER (TO_CHAR (data_iniziale, 'mi'));
appo_min_finali := TO_NUMBER (TO_CHAR (data_finale, 'mi'));
IF (appo_min_finali - appo_min_iniziali) < 0
THEN
appo_ore := appo_ore - 1;
END IF;
ELSE
appo_ore := 0;
END IF;
RETURN appo_ore;
END fun_ore_lavorative;
/

View File

@@ -0,0 +1,28 @@
CREATE OR REPLACE FUNCTION FUN_PIU_ORE_LAVORATIVE (data_iniziale IN DATE, ore IN NUMBER)
RETURN DATE
-- Aggiunge a data_iniziale un numero ore di ore lavorative
IS
appo_data DATE;
appo_resto NUMBER;
appo_ora NUMBER;
appo_giorni NUMBER;
n_ore NUMBER := ore;
BEGIN
appo_ora := TO_NUMBER (TO_CHAR (data_iniziale, 'HH24'));
IF n_ore < 24 - appo_ora
THEN
appo_data := data_iniziale + (n_ore / 24);
ELSE
n_ore := n_ore - 24 + appo_ora;
appo_data := TRUNC (fun_giorni_piu (data_iniziale, 1));
appo_giorni := FLOOR (n_ore / 24);
appo_resto := n_ore - appo_giorni * 24;
appo_data := dwh.fun_giorni_piu (appo_data, appo_giorni);
appo_data := appo_data + (appo_resto / 24);
END IF;
RETURN appo_data;
END fun_piu_ore_lavorative;
/

View File

@@ -0,0 +1,14 @@
CREATE OR REPLACE FUNCTION FUN_PRIMO_GIORNO_LAVORATIVO (mese_in IN NUMBER, anno_in IN NUMBER)
RETURN DATE
-- Calcola il primo giorno lavorativo del mese in input
IS
appo_gg NUMBER := NULL;
appo_var VARCHAR2 (12) := NULL;
appo_data DATE := NULL;
BEGIN
appo_var := '01-' || mese_in || '-' || anno_in;
appo_data := dwh.fun_date_festive_succ (TO_DATE (appo_var, 'DD-MM-YYYY'));
RETURN appo_data;
END fun_primo_giorno_lavorativo;
/

View File

@@ -0,0 +1,15 @@
CREATE OR REPLACE FUNCTION FUN_ULTIMO_GIORNO_LAVORATIVO (mese_in IN NUMBER, anno_in IN NUMBER)
RETURN DATE
-- Calcola l'ultimo giorno lavorativo del mese in input
IS
appo_gg NUMBER := NULL;
appo_var VARCHAR2 (12) := NULL;
appo_data DATE := NULL;
BEGIN
appo_var := '01-' || mese_in || '-' || anno_in;
appo_data :=
dwh.fun_date_festive (LAST_DAY (TO_DATE (appo_var, 'DD-MM-YYYY')));
RETURN appo_data;
END fun_ultimo_giorno_lavorativo;
/

View File

@@ -0,0 +1,48 @@
CREATE OR REPLACE FUNCTION RECIPIENT_ONLINE_ID
RETURN NUMBER
IS
--
-- To modify this template, edit file FUNC.TXT in TEMPLATE
-- directory of SQL Navigator
--
-- Purpose: Briefly explain the functionality of the function
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- --------- ------ -------------------------------------------
errore NUMBER (1);
-- Declare program variables as shown above
BEGIN
errore := 0;
IF errore = 0
THEN
dwh.update_rec_online_id (errore);
END IF;
IF errore = 0
THEN
dwh.update_rec_hoc_online_id (errore);
END IF;
IF errore = 0
THEN
dwh.update_rec_tacs_online_id (errore);
END IF;
IF errore = 0
THEN
dwh.sla_recipient_on_demand (errore);
END IF;
RETURN errore;
EXCEPTION
WHEN OTHERS
THEN
errore := 1;
DBMS_OUTPUT.put_line ( 'Errore in RECIPIENT_ONLINE_ID '
|| SQLERRM);
RETURN errore;
END;
/

View File

@@ -0,0 +1,50 @@
CREATE OR REPLACE FUNCTION RECIPIENT_ONLINE_MSISDN
RETURN NUMBER
IS
--
-- To modify this template, edit file FUNC.TXT in TEMPLATE
-- directory of SQL Navigator
--
-- Purpose: Briefly explain the functionality of the function
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- --------- ------ -------------------------------------------
errore NUMBER (1);
-- Declare program variables as shown above
BEGIN
errore := 0;
IF errore = 0
THEN
dwh.update_rec_online_msisdn (errore);
END IF;
IF errore = 0
THEN
dwh.update_rec_hoc_online_msisdn (errore);
END IF;
IF errore = 0
THEN
dwh.update_rec_tacs_online_msisdn (errore);
END IF;
IF errore = 0
THEN
dwh.sla_recipient_on_demand (errore);
END IF;
RETURN errore;
EXCEPTION
WHEN OTHERS
THEN
errore := 1;
DBMS_OUTPUT.put_line (
'Errore in RECIPIENT_ONLINE_MSISDN '
|| SQLERRM
);
RETURN errore;
END; -- Procedure
/

View File

@@ -0,0 +1,658 @@
CREATE OR REPLACE PROCEDURE "SLA_DONOR_3PARTI_ON_DEMAND" (cod_errore IN OUT NUMBER)
IS
-- Purpose: Calcolo degli SLA ANALITICI DONOR - 3PARTI ON DEMAND
--
-- MODIFICATION HISTORY
-- M.Zagaria 28/10/2004 Versione Iniziale
app_select VARCHAR2 (200);
app_c_aom dwh.mnp_dw_donor_online.aom_recipient%TYPE;
-- identificativo della richiesta di cui calcolare gli sla
app_aom_rec dwh.mnp_dw_donor_online.aom_recipient%TYPE;
app_id_richiesta dwh.mnp_dw_donor_online.id_richiesta%TYPE;
app_msisdn dwh.mnp_dw_donor_online.msisdn%TYPE;
app_tipo_richiesta VARCHAR2 (3); --- STD/HOC/TP
app_tipo_linea dwh.mnp_dw_donor_online.tipo_linea%TYPE;
app_marcaggio dwh.mnp_dw_donor_online.marcaggio%TYPE;
app_codfis_piva dwh.mnp_dw_donor_online.codice_fiscale_partita_iva%TYPE;
app_data_ric_richiesta DATE;
app_data_pic DATE;
app_sla0 dwh.mnp_dw_donor_online.sla_zero%TYPE;
app_data_invio_crm_bit DATE;
app_data_val_max DATE;
app_data_prima_val_max DATE;
app_data_val_eff DATE;
app_data_prima_val_eff DATE;
app_sla1 dwh.mnp_dw_donor_online.sla_uno%TYPE;
app_ric_crm_bit dwh.mnp_dw_donor_online.data_ricezione_da_ccrmbit%TYPE;
app_data_conf_teorica DATE;
app_data_conf_eff DATE;
app_data_cut_over_calc DATE;
app_data_cut_over_rec DATE;
app_data_cut_over_eff DATE;
app_sla2 dwh.mnp_dw_donor_online.sla_due%TYPE;
app_sla3 dwh.mnp_dw_porting_online.sla_tre%TYPE;
app_causale_rifiuto dwh.mnp_dw_donor_online.causale_rifiuto%TYPE;
app_campi VARCHAR (50);
-- variabile di appoggio per il codice dello sto finale
file_out UTL_FILE.file_type; -- file di log
dir_out VARCHAR2 (200);
line VARCHAR2 (200);
-----------------------------------------------------------------
-- Definizione cursore per l'estrazione degli AOM RECIPIENT da trattare
-----------------------------------------------------------------
CURSOR c_aom
IS
SELECT DISTINCT desc_olo
FROM mnp.mnp_olo
WHERE flag_terze_parti = 1;
-- Cursore per le richieste di cui calcolare gli SLA
-- DONOR STANDARD
CURSOR cur_richiesta
IS
SELECT id_richiesta
FROM mnp_dw_donor_online
WHERE aom_recipient = app_c_aom;
-- Cursore per le richieste di cui calcolare gli SLA
-- DONOR PRJ-HOC
CURSOR cur_richiesta_hoc
IS
SELECT id_richiesta
FROM mnp_dw_donor_hoc_online
WHERE aom_recipient = app_c_aom;
-- Cursore per le richieste di cui calcolare gli SLA
-- TERZE PARTI
CURSOR cur_richiesta_tp
IS
SELECT id_richiesta
FROM mnp_dw_porting_online
WHERE aom_recipient = app_c_aom;
BEGIN
cod_errore := 0;
dir_out := 'REPORT_SLA';
file_out := UTL_FILE.fopen (
dir_out,
'SLA_ANALITICO_DONOR_TERZE_PARTI_'
|| TO_CHAR (SYSDATE, 'ddMMyyyyhh24miss')
|| '.csv',
'w'
);
UTL_FILE.put_line (
file_out,
'RICHIESTE DONOR (STANDARD/PROGETTI AD HOC)/ TERZA PARTE ON DEMAND:;'
);
UTL_FILE.put_line (
file_out,
'AOM_REC;ID_RICHIESTA;MSISDN;TIPO_RICHIESTA;TIPO_LINEA;'
|| 'MARCAGGIO ;CODFIS_PIVA;DATA_RIC_RICHIESTA;DATA_PIC;SLA0;DATA_INVIO_CRM_BIT;'
|| 'DATA_VAL_MAX;DATA_PRIMA_VAL_MAX;DATA_VAL_EFF;DATA_PRIMA_VAL_EFF;SLA1;'
|| 'RIC_CRM_BIT;DATA_CONF_TEORICA;DATA_CONF_EFF;DATA_CUT_OVER_CALC;'
|| 'DATA_CUT_OVER_REC;DATA_CUT_OVER_EFF;SLA2;SLA3;CAUSALE_RIFIUTO;'
);
OPEN c_aom;
app_select := '0';
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH c_aom INTO app_c_aom;
EXIT WHEN c_aom%NOTFOUND;
-- Cursore per le richieste di cui calcolare gli SLA
-- DONOR STANDARD
OPEN cur_richiesta;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta INTO app_id_richiesta;
EXIT WHEN cur_richiesta%NOTFOUND;
-----------------------------------------------------------------
-- Estrazione dati richiesta per un AOM e per una determinata richiesta
--- DONOR STANDARD
-----------------------------------------------------------------
app_aom_rec := NULL;
app_msisdn := NULL;
app_tipo_richiesta := NULL;
app_tipo_linea := NULL;
app_marcaggio := NULL;
app_codfis_piva := NULL;
app_data_ric_richiesta := NULL;
app_data_pic := NULL;
app_sla0 := NULL;
app_data_invio_crm_bit := NULL;
app_data_val_max := NULL;
app_data_prima_val_max := NULL;
app_data_val_eff := NULL;
app_data_prima_val_eff := NULL;
app_sla1 := NULL;
app_ric_crm_bit := NULL;
app_data_conf_teorica := NULL;
app_data_conf_eff := NULL;
app_data_cut_over_calc := NULL;
app_data_cut_over_rec := NULL;
app_data_cut_over_eff := NULL;
app_sla2 := NULL;
app_sla3 := NULL;
app_causale_rifiuto := NULL;
app_select := '1';
BEGIN
SELECT aom_recipient, id_richiesta, msisdn,
'STD', tipo_linea, marcaggio,
codice_fiscale_partita_iva, data_ricezione_richiesta,
data_presa_in_carico, sla_zero,
data_invio_ai_sistemi_commer, data_validazione_max,
data_validazione, sla_uno, data_ricezione_da_ccrmbit,
data_cut_over_calc, data_cut_over_eff, sla_due,
causale_rifiuto
INTO app_aom_rec, app_id_richiesta, app_msisdn,
app_tipo_richiesta, app_tipo_linea, app_marcaggio,
app_codfis_piva, app_data_ric_richiesta,
app_data_pic, app_sla0,
app_data_invio_crm_bit, app_data_val_max,
app_data_val_eff, app_sla1, app_ric_crm_bit,
app_data_cut_over_calc, app_data_cut_over_eff, app_sla2,
app_causale_rifiuto
FROM mnp_dw_donor_online
WHERE id_richiesta = app_id_richiesta
AND ( sla_zero > 0
OR sla_uno > 0
OR sla_due > 0
);
UTL_FILE.put_line (
file_out,
app_aom_rec
|| ';'
|| app_id_richiesta
|| ';'
|| ''''
|| app_msisdn
|| ''''
|| ';'
|| app_tipo_richiesta
|| ';'
|| app_tipo_linea
|| ';'
|| app_marcaggio
|| ';'
|| app_codfis_piva
|| ';'
|| app_data_ric_richiesta
|| ';'
|| app_data_pic
|| ';'
|| app_sla0
|| ';'
|| app_data_invio_crm_bit
|| ';'
|| app_data_val_max
|| ';'
|| app_data_prima_val_max
|| ';'
|| app_data_val_eff
|| ';'
|| app_data_prima_val_eff
|| ';'
|| app_sla1
|| ';'
|| app_ric_crm_bit
|| ';'
|| app_data_conf_teorica
|| ';'
|| app_data_conf_eff
|| ';'
|| app_data_cut_over_calc
|| ';'
|| app_data_cut_over_rec
|| ';'
|| app_data_cut_over_eff
|| ';'
|| app_sla2
|| ';'
|| app_sla3
|| ';'
|| app_causale_rifiuto
|| ';'
);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
app_id_richiesta := NULL;
END;
------------ Scrive i dati della RICHIESTA se c'h almeno uno SLA
END LOOP; -- richiesta
CLOSE cur_richiesta;
UTL_FILE.fflush (file_out);
OPEN cur_richiesta_hoc;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta_hoc INTO app_id_richiesta;
EXIT WHEN cur_richiesta_hoc%NOTFOUND;
-----------------------------------------------------------------
-- Estrazione dati richiesta per un AOM e per una determinata richiesta
--- DONOR PRJ-HOC
-----------------------------------------------------------------
app_aom_rec := NULL;
app_msisdn := NULL;
app_tipo_richiesta := NULL;
app_tipo_linea := NULL;
app_marcaggio := NULL;
app_codfis_piva := NULL;
app_data_ric_richiesta := NULL;
app_data_pic := NULL;
app_sla0 := NULL;
app_data_invio_crm_bit := NULL;
app_data_val_max := NULL;
app_data_prima_val_max := NULL;
app_data_val_eff := NULL;
app_data_prima_val_eff := NULL;
app_sla1 := NULL;
app_ric_crm_bit := NULL;
app_data_conf_teorica := NULL;
app_data_conf_eff := NULL;
app_data_cut_over_calc := NULL;
app_data_cut_over_rec := NULL;
app_data_cut_over_eff := NULL;
app_sla2 := NULL;
app_sla3 := NULL;
app_causale_rifiuto := NULL;
app_select := '2';
BEGIN
SELECT aom_recipient, id_richiesta, msisdn,
'HOC', tipo_linea, marcaggio,
codice_fiscale_partita_iva, data_ricezione_richiesta,
data_presa_in_carico, sla_zero,
data_invio_ai_sistemi_commer, data_validazione_max,
data_prima_validazione, sla_uno,
data_ricezione_da_ccrmbit, data_cut_over_calc,
data_cut_over_calc, data_cut_over_eff, sla_due,
causale_rifiuto
INTO app_aom_rec, app_id_richiesta, app_msisdn,
app_tipo_richiesta, app_tipo_linea, app_marcaggio,
app_codfis_piva, app_data_ric_richiesta,
app_data_pic, app_sla0,
app_data_invio_crm_bit, app_data_prima_val_max,
app_data_prima_val_eff, app_sla1,
app_ric_crm_bit, app_data_cut_over_calc,
app_data_cut_over_rec, app_data_cut_over_eff, app_sla2,
app_causale_rifiuto
FROM mnp_dw_donor_hoc_online
WHERE id_richiesta = app_id_richiesta
AND ( sla_zero > 0
OR sla_uno > 0
OR sla_due > 0
);
------------ Scrive i dati della RICHIESTA se c'h almeno uno SLA
UTL_FILE.put_line (
file_out,
app_aom_rec
|| ';'
|| app_id_richiesta
|| ';'
|| ''''
|| app_msisdn
|| ''''
|| ';'
|| app_tipo_richiesta
|| ';'
|| app_tipo_linea
|| ';'
|| app_marcaggio
|| ';'
|| app_codfis_piva
|| ';'
|| app_data_ric_richiesta
|| ';'
|| app_data_pic
|| ';'
|| app_sla0
|| ';'
|| app_data_invio_crm_bit
|| ';'
|| app_data_val_max
|| ';'
|| app_data_prima_val_max
|| ';'
|| app_data_val_eff
|| ';'
|| app_data_prima_val_eff
|| ';'
|| app_sla1
|| ';'
|| app_ric_crm_bit
|| ';'
|| app_data_conf_teorica
|| ';'
|| app_data_conf_eff
|| ';'
|| app_data_cut_over_calc
|| ';'
|| app_data_cut_over_rec
|| ';'
|| app_data_cut_over_eff
|| ';'
|| app_sla2
|| ';'
|| app_sla3
|| ';'
|| app_causale_rifiuto
|| ';'
);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
app_id_richiesta := NULL;
END;
END LOOP; -- richiesta
CLOSE cur_richiesta_hoc;
OPEN cur_richiesta_tp;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta_tp INTO app_id_richiesta;
EXIT WHEN cur_richiesta_tp%NOTFOUND;
-----------------------------------------------------------------
-- Estrazione dati richiesta per un AOM e per una determinata richiesta
--- TERZE PARTI
-----------------------------------------------------------------
app_aom_rec := NULL;
app_msisdn := NULL;
app_tipo_richiesta := NULL;
app_tipo_linea := NULL;
app_marcaggio := NULL;
app_codfis_piva := NULL;
app_data_ric_richiesta := NULL;
app_data_pic := NULL;
app_sla0 := NULL;
app_data_invio_crm_bit := NULL;
app_data_val_max := NULL;
app_data_prima_val_max := NULL;
app_data_val_eff := NULL;
app_data_prima_val_eff := NULL;
app_sla1 := NULL;
app_ric_crm_bit := NULL;
app_data_conf_teorica := NULL;
app_data_conf_eff := NULL;
app_data_cut_over_calc := NULL;
app_data_cut_over_rec := NULL;
app_data_cut_over_eff := NULL;
app_sla2 := NULL;
app_sla3 := NULL;
app_causale_rifiuto := NULL;
app_select := '3-'
|| app_c_aom;
BEGIN
SELECT aom_recipient, id_richiesta, msisdn,
'TP', data_ricezione_richiesta,
data_configurazione_teorica,
data_configurazione_effettiva, data_cut_over_calc,
sla_tre
INTO app_aom_rec, app_id_richiesta, app_msisdn,
app_tipo_richiesta, app_data_ric_richiesta,
app_data_conf_teorica,
app_data_conf_eff, app_data_cut_over_calc,
app_sla3
FROM mnp_dw_porting_online
WHERE id_richiesta = app_id_richiesta AND sla_tre > 0;
------------ Scrive i dati della RICHIESTA se SLA3 > 0
UTL_FILE.put_line (
file_out,
app_aom_rec
|| ';'
|| app_id_richiesta
|| ';'
|| ''''
|| app_msisdn
|| ''''
|| ';'
|| app_tipo_richiesta
|| ';'
|| app_tipo_linea
|| ';'
|| app_marcaggio
|| ';'
|| app_codfis_piva
|| ';'
|| app_data_ric_richiesta
|| ';'
|| app_data_pic
|| ';'
|| app_sla0
|| ';'
|| app_data_invio_crm_bit
|| ';'
|| app_data_val_max
|| ';'
|| app_data_prima_val_max
|| ';'
|| app_data_val_eff
|| ';'
|| app_data_prima_val_eff
|| ';'
|| app_sla1
|| ';'
|| app_ric_crm_bit
|| ';'
|| app_data_conf_teorica
|| ';'
|| app_data_conf_eff
|| ';'
|| app_data_cut_over_calc
|| ';'
|| app_data_cut_over_rec
|| ';'
|| app_data_cut_over_eff
|| ';'
|| app_sla2
|| ';'
|| app_sla3
|| ';'
|| app_causale_rifiuto
|| ';'
);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
app_id_richiesta := NULL;
END;
END LOOP; -- richiesta
CLOSE cur_richiesta_tp;
END LOOP; --aom
CLOSE c_aom;
UTL_FILE.fflush (file_out);
-----------------------------------------------------------------
-- SCRITTURA SU FILE DELLE RICHIESTE SENZA SLA
-----------------------------------------------------------------
UTL_FILE.put_line (file_out, 'ID_RICHIESTA;MSISDN;CAMPI;');
OPEN c_aom;
app_campi := 'Richiesta non soggetta a SLA';
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH c_aom INTO app_c_aom;
EXIT WHEN c_aom%NOTFOUND;
-- Cursore per le richieste di cui calcolare gli SLA
-- DONOR STANDARD
OPEN cur_richiesta;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta INTO app_id_richiesta;
EXIT WHEN cur_richiesta%NOTFOUND;
-----------------------------------------------------------------
-- Estrazione dati richiesta per un AOM e per una determinata richiesta
--- DONOR STANDARD
-----------------------------------------------------------------
app_aom_rec := NULL;
app_msisdn := NULL;
app_select := '4';
BEGIN
SELECT aom_recipient, id_richiesta, msisdn
INTO app_aom_rec, app_id_richiesta, app_msisdn
FROM mnp_dw_donor_online
WHERE id_richiesta = app_id_richiesta
AND sla_zero = 0
AND sla_uno = 0
AND sla_due = 0;
------------ Scrive i dati della RICHIESTA se non SLA
UTL_FILE.put_line (
file_out,
app_id_richiesta
|| ';'
|| ''''
|| app_msisdn
|| ''''
|| ';'
|| app_campi
|| ';'
);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
app_id_richiesta := NULL;
END;
END LOOP; -- richiesta
CLOSE cur_richiesta;
UTL_FILE.fflush (file_out);
OPEN cur_richiesta_hoc;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta_hoc INTO app_id_richiesta;
EXIT WHEN cur_richiesta_hoc%NOTFOUND;
-----------------------------------------------------------------
-- Estrazione dati richiesta per un AOM e per una determinata richiesta
--- DONOR PRJ-HOC
-----------------------------------------------------------------
app_aom_rec := NULL;
app_msisdn := NULL;
app_select := '5';
BEGIN
SELECT aom_recipient, id_richiesta, msisdn
INTO app_aom_rec, app_id_richiesta, app_msisdn
FROM mnp_dw_donor_hoc_online
WHERE id_richiesta = app_id_richiesta
AND sla_zero = 0
AND sla_uno = 0
AND sla_due = 0;
------------ Scrive i dati della RICHIESTA se non SLA
UTL_FILE.put_line (
file_out,
app_id_richiesta
|| ';'
|| ''''
|| app_msisdn
|| ''''
|| ';'
|| app_campi
|| ';'
);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
app_id_richiesta := NULL;
END;
END LOOP; -- richiesta
CLOSE cur_richiesta_hoc;
OPEN cur_richiesta_tp;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta_tp INTO app_id_richiesta;
EXIT WHEN cur_richiesta_tp%NOTFOUND;
-----------------------------------------------------------------
-- Estrazione dati richiesta per un AOM e per una determinata richiesta
--- TERZE PARTI
-----------------------------------------------------------------
app_aom_rec := NULL;
app_msisdn := NULL;
app_select := '5';
BEGIN
SELECT aom_recipient, id_richiesta, msisdn
INTO app_aom_rec, app_id_richiesta, app_msisdn
FROM mnp_dw_porting_online
WHERE id_richiesta = app_id_richiesta AND sla_tre = 0;
------------ Scrive i dati della RICHIESTA se non SLA
UTL_FILE.put_line (
file_out,
app_id_richiesta
|| ';'
|| ''''
|| app_msisdn
|| ''''
|| ';'
|| app_campi
|| ';'
);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
app_id_richiesta := NULL;
END;
END LOOP; -- richiesta
CLOSE cur_richiesta_tp;
END LOOP; --aom
CLOSE c_aom;
UTL_FILE.fflush (file_out);
UTL_FILE.fclose (file_out);
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line (
'Errore in REPORT_ANALITICO_SLA_DONOR_TERZE_PARTI_ON_DEMAND : (SEL '
|| app_select
|| ' ) - '
|| SQLERRM
);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,906 @@
CREATE OR REPLACE PROCEDURE SLA_RECIPIENT_ON_DEMAND (cod_errore IN OUT NUMBER)
IS
-- Purpose: Calcolo degli SLA ANALITICI RECIPIENT ON DEMAND
--
-- MODIFICATION HISTORY
-- M.Zagaria 02/11/2004 Versione Iniziale
app_select VARCHAR2 (200);
app_campi VARCHAR2 (200);
app_c_aom mnp.mnp_olo.desc_olo%TYPE;
app_c_aom_tp mnp.mnp_olo.desc_olo%TYPE;
app_ind NUMBER (1);
app_aom_tp dwh.mnp_dw_rec_sla_terzeparti.aom_terze_parti%TYPE;
app_data_conf_teo_aom DATE;
app_data_eff_aom DATE;
app_sla3_aom dwh.mnp_dw_rec_sla_terzeparti.sla_tre_minore%TYPE;
-- identificativo della richiesta di cui calcolare gli sla
app_aom_don dwh.mnp_dw_rec.aom_donor%TYPE;
app_aom_tp_1 dwh.mnp_dw_rec_sla_terzeparti.aom_terze_parti%TYPE;
app_aom_tp_2 dwh.mnp_dw_rec_sla_terzeparti.aom_terze_parti%TYPE;
app_aom_tp_3 dwh.mnp_dw_rec_sla_terzeparti.aom_terze_parti%TYPE;
app_id_richiesta dwh.mnp_dw_rec_online.id_richiesta%TYPE;
app_msisdn dwh.mnp_dw_rec.msisdn%TYPE;
app_tipo_richiesta VARCHAR2 (5); --- STD/HOC/TACS
app_tipo_linea dwh.mnp_dw_rec.tipo_linea%TYPE;
app_data_ric_richiesta DATE;
app_data_invio_aom DATE;
app_data_pic DATE;
app_sla0 dwh.mnp_dw_rec_sla.sla_zero_minore%TYPE;
app_data_val_max DATE;
app_data_prima_val_max DATE;
app_data_val_eff DATE;
app_data_prima_val_eff DATE;
app_sla1 dwh.mnp_dw_rec_sla.sla_uno_minore%TYPE;
app_data_conf_teo_aom1 DATE;
app_data_conf_teo_aom2 DATE;
app_data_conf_teo_aom3 DATE;
app_data_eff_aom1 DATE;
app_data_eff_aom2 DATE;
app_data_eff_aom3 DATE;
app_data_cut_over_calc DATE;
app_data_cut_over_aom DATE;
app_data_esple_don DATE;
app_sla2 dwh.mnp_dw_rec_sla.sla_due_minore%TYPE;
app_sla3_aom1 dwh.mnp_dw_rec_sla_terzeparti.sla_tre_minore%TYPE;
app_sla3_aom2 dwh.mnp_dw_rec_sla_terzeparti.sla_tre_minore%TYPE;
app_sla3_aom3 dwh.mnp_dw_rec_sla_terzeparti.sla_tre_minore%TYPE;
app_causale_rifiuto dwh.mnp_dw_rec.causale_rifiuto%TYPE;
-- variabile di appoggio per il codice dello sto finale
file_out UTL_FILE.file_type; -- file di log
dir_out VARCHAR2 (200);
line VARCHAR2 (200);
-----------------------------------------------------------------
-- Definizione cursore per l'estrazione degli AOM RECIPIENT da trattare
-----------------------------------------------------------------
-----------------------------------------------------------------
-- Definizione cursore per l'estrazione degli AOM RECIPIENT da trattare
-----------------------------------------------------------------
CURSOR c_aom
IS
SELECT DISTINCT desc_olo
FROM mnp.mnp_olo
WHERE flag_terze_parti = 1;
-- Cursore per le richieste di cui calcolare gli SLA
-- RECIPIENT STANDARD
CURSOR cur_richiesta
IS
SELECT id_richiesta
FROM mnp_dw_rec_online
WHERE aom_donor = app_c_aom;
-- Cursore per le richieste di cui calcolare gli SLA
-- RECIPIENT AD HOC
CURSOR cur_richiesta_hoc
IS
SELECT id_richiesta
FROM mnp_dw_rec_hoc_online
WHERE aom_donor = app_c_aom;
-- Cursore per le richieste di cui calcolare gli SLA
-- RECIPIENT Scivolo TACS
CURSOR cur_richiesta_tacs
IS
SELECT id_richiesta
FROM mnp_dw_rec_tacs_online
WHERE aom_donor = app_c_aom;
-- Calcolo SLA3 Recipient Standard / HOC / TACS
CURSOR c_aom_tp
IS
SELECT DISTINCT desc_olo
FROM mnp.mnp_olo
WHERE flag_terze_parti = 1 AND desc_olo <> app_c_aom;
BEGIN
cod_errore := 0;
dir_out := 'REPORT_SLA';
file_out := UTL_FILE.fopen (
dir_out,
'SLA_ANALITICO_RECIPIENT_'
|| TO_CHAR (SYSDATE, 'ddMMyyyyhh24miss')
|| '.csv',
'w'
);
UTL_FILE.put_line (
file_out,
'RICHIESTE RECIPIENT (STANDARD/PROGETTI AD HOC/TACS) ON DEMAND:;'
);
UTL_FILE.put_line (
file_out,
'AOM_DON;AOM_TP_1;AOM_TP_2;AOM_TP_3;ID_RICHIESTA;MSISDN;TIPO_RICHIESTA;'
|| 'TIPO_LINEA;DATA_RIC_RICHIESTA;DATA_INVIO_AOM;DATA_PIC;SLA0;DATA_VAL_MAX;'
|| 'DATA_PRIMA_VAL_MAX;DATA_VAL_EFF;DATA_PRIMA_VAL_EFF;SLA1;DATA_CONF_TEO_AOM1;'
|| 'DATA_CONF_TEO_AOM2;DATA_CONF_TEO_AOM3;DATA_EFF_AOM1;DATA_EFF_AOM2;DATA_EFF_AOM3;'
|| 'DATA_CUT_OVER_CALC;DATA_CUT_OVER_AOM;DATA_ESPLE_DON;SLA2;SLA3_AOM1;SLA3_AOM2;'
|| 'SLA3_AOM3;CAUSALE_RIFIUTO;'
);
OPEN c_aom;
app_select := '0';
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH c_aom INTO app_c_aom;
EXIT WHEN c_aom%NOTFOUND;
-----------------------------------------------------------------
-- Estrazione dati richiesta per un AOM e per una determinata richiesta
--- RECIPIENT STANDARD
-----------------------------------------------------------------
-- Per ogni richiesta di cui devo calcolare gli SLA
OPEN cur_richiesta;
LOOP
FETCH cur_richiesta INTO app_id_richiesta;
EXIT WHEN cur_richiesta%NOTFOUND;
app_aom_don := NULL;
app_aom_tp_1 := NULL;
app_aom_tp_2 := NULL;
app_aom_tp_3 := NULL;
app_msisdn := NULL;
app_tipo_richiesta := NULL;
app_tipo_linea := NULL;
app_data_ric_richiesta := NULL;
app_data_invio_aom := NULL;
app_data_pic := NULL;
app_sla0 := NULL;
app_data_val_max := NULL;
app_data_prima_val_max := NULL;
app_data_val_eff := NULL;
app_data_prima_val_eff := NULL;
app_sla1 := NULL;
app_data_conf_teo_aom1 := NULL;
app_data_conf_teo_aom2 := NULL;
app_data_conf_teo_aom3 := NULL;
app_data_eff_aom1 := NULL;
app_data_eff_aom2 := NULL;
app_data_eff_aom3 := NULL;
app_data_cut_over_calc := NULL;
app_data_cut_over_aom := NULL;
app_data_esple_don := NULL;
app_sla2 := NULL;
app_sla3_aom1 := NULL;
app_sla3_aom2 := NULL;
app_sla3_aom3 := NULL;
app_causale_rifiuto := NULL;
BEGIN
SELECT aom_donor, id_richiesta, msisdn,
'STD', tipo_linea,
data_ricezione_richiesta, data_invio_ad_aom,
data_presa_in_carico, sla_zero, data_validazione_max,
data_validazione, sla_uno, data_cut_over_aom,
data_espletamento_donating, sla_due, causale_rifiuto
INTO app_aom_don, app_id_richiesta, app_msisdn,
app_tipo_richiesta, app_tipo_linea,
app_data_ric_richiesta, app_data_invio_aom,
app_data_pic, app_sla0, app_data_val_max,
app_data_val_eff, app_sla1, app_data_cut_over_aom,
app_data_esple_don, app_sla2, app_causale_rifiuto
FROM mnp_dw_rec_online,
(SELECT SUM (sla_tre) AS sla_tre
FROM mnp_dw_rec_tp_online
WHERE mnp_dw_rec_tp_online.id_richiesta =
app_id_richiesta) sla_tp
WHERE id_richiesta = app_id_richiesta
AND ( sla_zero > 0
OR sla_uno > 0
OR sla_due > 0
OR sla_tp.sla_tre > 0
);
app_ind := 1;
OPEN c_aom_tp;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH c_aom_tp INTO app_c_aom_tp;
EXIT WHEN c_aom_tp%NOTFOUND;
app_select := '1';
BEGIN
-- slq clacolo sla
SELECT aom_terze_parti, data_configurazione_teorica,
data_configurazione_effettiva, sla_tre
INTO app_aom_tp, app_data_conf_teo_aom,
app_data_eff_aom, app_sla3_aom
FROM mnp_dw_rec_tp_online
WHERE id_richiesta = app_id_richiesta
AND aom_terze_parti = app_c_aom_tp;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
app_sla3_aom := -1;
END;
IF (app_sla3_aom > 0)
THEN
IF (app_ind = 1)
THEN
app_aom_tp_1 := app_aom_tp;
app_data_conf_teo_aom1 := app_data_conf_teo_aom;
app_data_eff_aom1 := app_data_eff_aom;
app_sla3_aom1 := app_sla3_aom;
ELSE
IF (app_ind = 2)
THEN
app_aom_tp_2 := app_aom_tp;
app_data_conf_teo_aom2 := app_data_conf_teo_aom;
app_data_eff_aom2 := app_data_eff_aom;
app_sla3_aom2 := app_sla3_aom;
END IF;
END IF;
END IF;
app_ind := app_ind
+ 1;
END LOOP; -- C_Aom_tp
CLOSE c_aom_tp;
UTL_FILE.put_line (
file_out,
app_aom_don
|| ';'
|| app_aom_tp_1
|| ';'
|| app_aom_tp_2
|| ';'
|| app_aom_tp_3
|| ';'
|| ''''
|| app_id_richiesta
|| ''''
|| ';'
|| ''''
|| app_msisdn
|| ''''
|| ';'
|| app_tipo_richiesta
|| ';'
|| app_tipo_linea
|| ';'
|| app_data_ric_richiesta
|| ';'
|| app_data_invio_aom
|| ';'
|| app_data_pic
|| ';'
|| app_sla0
|| ';'
|| app_data_val_max
|| ';'
|| app_data_prima_val_max
|| ';'
|| app_data_val_eff
|| ';'
|| app_data_prima_val_eff
|| ';'
|| app_sla1
|| ';'
|| app_data_conf_teo_aom1
|| ';'
|| app_data_conf_teo_aom2
|| ';'
|| app_data_conf_teo_aom3
|| ';'
|| app_data_eff_aom1
|| ';'
|| app_data_eff_aom2
|| ';'
|| app_data_eff_aom3
|| ';'
|| app_data_cut_over_calc
|| ';'
|| app_data_cut_over_aom
|| ';'
|| app_data_esple_don
|| ';'
|| app_sla2
|| ';'
|| app_sla3_aom1
|| ';'
|| app_sla3_aom2
|| ';'
|| app_sla3_aom3
|| ';'
|| app_causale_rifiuto
|| ';'
);
UTL_FILE.fflush (file_out);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
app_id_richiesta := '';
END;
END LOOP; -- richiesta
CLOSE cur_richiesta;
UTL_FILE.fflush (file_out);
-----------------------------------------------------------------
-- Estrazione dati richiesta per un AOM e per una determinata richiesta
--- RECIPIENT HOC
----------------------------------------------------------------
-- Per ogni richiesta di cui devo calcolare gli SLA
OPEN cur_richiesta_hoc;
LOOP
FETCH cur_richiesta_hoc INTO app_id_richiesta;
EXIT WHEN cur_richiesta_hoc%NOTFOUND;
app_aom_don := NULL;
app_aom_tp_1 := NULL;
app_aom_tp_2 := NULL;
app_aom_tp_3 := NULL;
app_msisdn := NULL;
app_tipo_richiesta := NULL;
app_tipo_linea := NULL;
app_data_ric_richiesta := NULL;
app_data_invio_aom := NULL;
app_data_pic := NULL;
app_sla0 := NULL;
app_data_val_max := NULL;
app_data_prima_val_max := NULL;
app_data_val_eff := NULL;
app_data_prima_val_eff := NULL;
app_sla1 := NULL;
app_data_conf_teo_aom1 := NULL;
app_data_conf_teo_aom2 := NULL;
app_data_conf_teo_aom3 := NULL;
app_data_eff_aom1 := NULL;
app_data_eff_aom2 := NULL;
app_data_eff_aom3 := NULL;
app_data_cut_over_calc := NULL;
app_data_cut_over_aom := NULL;
app_data_esple_don := NULL;
app_sla2 := NULL;
app_sla3_aom1 := NULL;
app_sla3_aom2 := NULL;
app_sla3_aom3 := NULL;
app_causale_rifiuto := NULL;
app_select := '3';
BEGIN
SELECT aom_donor, id_richiesta, msisdn,
'HOC', tipo_linea,
data_ricezione_richiesta, data_invio_ad_aom,
data_presa_in_carico, sla_zero, data_validazione_max,
data_validazione, sla_uno, data_cut_over_aom,
data_espletamento_donating, sla_due, causale_rifiuto
INTO app_aom_don, app_id_richiesta, app_msisdn,
app_tipo_richiesta, app_tipo_linea,
app_data_ric_richiesta, app_data_invio_aom,
app_data_pic, app_sla0, app_data_val_max,
app_data_val_eff, app_sla1, app_data_cut_over_aom,
app_data_esple_don, app_sla2, app_causale_rifiuto
FROM mnp_dw_rec_hoc_online,
(SELECT SUM (sla_tre) AS sla_tre
FROM mnp_dw_rec_hoc_tp_online
WHERE mnp_dw_rec_hoc_tp_online.id_richiesta =
app_id_richiesta) sla_hoc_tp
WHERE id_richiesta = app_id_richiesta
AND ( sla_zero > 0
OR sla_uno > 0
OR sla_due > 0
OR sla_hoc_tp.sla_tre > 0
);
app_ind := 1;
OPEN c_aom_tp;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH c_aom_tp INTO app_c_aom_tp;
EXIT WHEN c_aom_tp%NOTFOUND;
app_select := '4';
BEGIN
-- slq clacolo sla
SELECT aom_terze_parti, data_configurazione_teorica,
data_configurazione_effettiva, sla_tre
INTO app_aom_tp, app_data_conf_teo_aom,
app_data_eff_aom, app_sla3_aom
FROM mnp_dw_rec_hoc_tp_online
WHERE id_richiesta = app_id_richiesta
AND aom_terze_parti = app_c_aom_tp;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
app_sla3_aom := -1;
END;
IF (app_sla3_aom > 0)
THEN
IF (app_ind = 1)
THEN
app_aom_tp_1 := app_aom_tp;
app_data_conf_teo_aom1 := app_data_conf_teo_aom;
app_data_eff_aom1 := app_data_eff_aom;
app_sla3_aom1 := app_sla3_aom;
ELSE
IF (app_ind = 2)
THEN
app_aom_tp_2 := app_aom_tp;
app_data_conf_teo_aom2 := app_data_conf_teo_aom;
app_data_eff_aom2 := app_data_eff_aom;
app_sla3_aom2 := app_sla3_aom;
END IF;
END IF;
END IF;
app_ind := app_ind
+ 1;
END LOOP; -- C_Aom_tp
CLOSE c_aom_tp;
UTL_FILE.put_line (
file_out,
app_aom_don
|| ';'
|| app_aom_tp_1
|| ';'
|| app_aom_tp_2
|| ';'
|| app_aom_tp_3
|| ';'
|| ''''
|| app_id_richiesta
|| ''''
|| ';'
|| ''''
|| app_msisdn
|| ''''
|| ';'
|| app_tipo_richiesta
|| ';'
|| app_tipo_linea
|| ';'
|| app_data_ric_richiesta
|| ';'
|| app_data_invio_aom
|| ';'
|| app_data_pic
|| ';'
|| app_sla0
|| ';'
|| app_data_val_max
|| ';'
|| app_data_prima_val_max
|| ';'
|| app_data_val_eff
|| ';'
|| app_data_prima_val_eff
|| ';'
|| app_sla1
|| ';'
|| app_data_conf_teo_aom1
|| ';'
|| app_data_conf_teo_aom2
|| ';'
|| app_data_conf_teo_aom3
|| ';'
|| app_data_eff_aom1
|| ';'
|| app_data_eff_aom2
|| ';'
|| app_data_eff_aom3
|| ';'
|| app_data_cut_over_calc
|| ';'
|| app_data_cut_over_aom
|| ';'
|| app_data_esple_don
|| ';'
|| app_sla2
|| ';'
|| app_sla3_aom1
|| ';'
|| app_sla3_aom2
|| ';'
|| app_sla3_aom3
|| ';'
|| app_causale_rifiuto
|| ';'
);
UTL_FILE.fflush (file_out);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
app_id_richiesta := '';
END;
END LOOP; -- richiesta
CLOSE cur_richiesta_hoc;
UTL_FILE.fflush (file_out);
END LOOP; --aom
CLOSE c_aom;
UTL_FILE.fflush (file_out);
-----------------------------------------------------------------
-- Estrazione dati richiesta per un AOM e per una determinata richiesta
--- RECIPIENT SCIVOLO TACS
----------------------------------------------------------------
-- Per ogni richiesta di cui devo calcolare gli SLA
app_c_aom := 'TIMT';
OPEN cur_richiesta_tacs;
LOOP
FETCH cur_richiesta_tacs INTO app_id_richiesta;
EXIT WHEN cur_richiesta_tacs%NOTFOUND;
app_aom_don := NULL;
app_aom_tp_1 := NULL;
app_aom_tp_2 := NULL;
app_aom_tp_3 := NULL;
app_msisdn := NULL;
app_tipo_richiesta := NULL;
app_tipo_linea := NULL;
app_data_ric_richiesta := NULL;
app_data_invio_aom := NULL;
app_data_pic := NULL;
app_sla0 := NULL;
app_data_val_max := NULL;
app_data_prima_val_max := NULL;
app_data_val_eff := NULL;
app_data_prima_val_eff := NULL;
app_sla1 := NULL;
app_data_conf_teo_aom1 := NULL;
app_data_conf_teo_aom2 := NULL;
app_data_conf_teo_aom3 := NULL;
app_data_eff_aom1 := NULL;
app_data_eff_aom2 := NULL;
app_data_eff_aom3 := NULL;
app_data_cut_over_calc := NULL;
app_data_cut_over_aom := NULL;
app_data_esple_don := NULL;
app_sla2 := NULL;
app_sla3_aom1 := NULL;
app_sla3_aom2 := NULL;
app_sla3_aom3 := NULL;
app_causale_rifiuto := NULL;
app_select := '5';
BEGIN
SELECT aom_donor, id_richiesta, msisdn,
'TACS', tipo_linea, data_ricezione_richiesta,
data_validazione_max, data_cut_over_calc
INTO app_aom_don, app_id_richiesta, app_msisdn,
app_tipo_richiesta, app_tipo_linea, app_data_ric_richiesta,
app_data_val_max, app_data_cut_over_calc
FROM mnp_dw_rec_tacs_online,
(SELECT SUM (sla_tre) AS sla_tre
FROM mnp_dw_rec_tacs_tp_online
WHERE mnp_dw_rec_tacs_tp_online.id_richiesta =
app_id_richiesta) sla_tacs_tp
WHERE id_richiesta = app_id_richiesta AND sla_tacs_tp.sla_tre > 0;
app_ind := 1;
OPEN c_aom_tp;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH c_aom_tp INTO app_c_aom_tp;
EXIT WHEN c_aom_tp%NOTFOUND;
app_select := '6';
BEGIN
-- slq clacolo sla
SELECT aom_terze_parti, data_configurazione_teorica,
data_configurazione_effettiva, sla_tre
INTO app_aom_tp, app_data_conf_teo_aom,
app_data_eff_aom, app_sla3_aom
FROM mnp_dw_rec_tacs_tp_online
WHERE id_richiesta = app_id_richiesta
AND aom_terze_parti = app_c_aom_tp;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
app_sla3_aom := -1;
END;
IF (app_sla3_aom > 0)
THEN
IF (app_ind = 1)
THEN
app_aom_tp_1 := app_aom_tp;
app_data_conf_teo_aom1 := app_data_conf_teo_aom;
app_data_eff_aom1 := app_data_eff_aom;
app_sla3_aom1 := app_sla3_aom;
ELSE
IF (app_ind = 2)
THEN
app_aom_tp_2 := app_aom_tp;
app_data_conf_teo_aom2 := app_data_conf_teo_aom;
app_data_eff_aom2 := app_data_eff_aom;
app_sla3_aom2 := app_sla3_aom;
ELSE
IF (app_ind = 3)
THEN
app_aom_tp_3 := app_aom_tp;
app_data_conf_teo_aom3 := app_data_conf_teo_aom;
app_data_eff_aom3 := app_data_eff_aom;
app_sla3_aom3 := app_sla3_aom;
END IF;
END IF;
END IF;
END IF;
app_ind := app_ind
+ 1;
END LOOP; -- C_Aom_tp
CLOSE c_aom_tp;
UTL_FILE.put_line (
file_out,
app_aom_don
|| ';'
|| app_aom_tp_1
|| ';'
|| app_aom_tp_2
|| ';'
|| app_aom_tp_3
|| ';'
|| ''''
|| app_id_richiesta
|| ''''
|| ';'
|| ''''
|| app_msisdn
|| ''''
|| ';'
|| app_tipo_richiesta
|| ';'
|| app_tipo_linea
|| ';'
|| app_data_ric_richiesta
|| ';'
|| app_data_invio_aom
|| ';'
|| app_data_pic
|| ';'
|| app_sla0
|| ';'
|| app_data_val_max
|| ';'
|| app_data_prima_val_max
|| ';'
|| app_data_val_eff
|| ';'
|| app_data_prima_val_eff
|| ';'
|| app_sla1
|| ';'
|| app_data_conf_teo_aom1
|| ';'
|| app_data_conf_teo_aom2
|| ';'
|| app_data_conf_teo_aom3
|| ';'
|| app_data_eff_aom1
|| ';'
|| app_data_eff_aom2
|| ';'
|| app_data_eff_aom3
|| ';'
|| app_data_cut_over_calc
|| ';'
|| app_data_cut_over_aom
|| ';'
|| app_data_esple_don
|| ';'
|| app_sla2
|| ';'
|| app_sla3_aom1
|| ';'
|| app_sla3_aom2
|| ';'
|| app_sla3_aom3
|| ';'
|| app_causale_rifiuto
|| ';'
);
UTL_FILE.fflush (file_out);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
app_id_richiesta := '';
END;
END LOOP; -- richiesta
CLOSE cur_richiesta_tacs;
UTL_FILE.fflush (file_out);
-----------------------------------------------------------------
-- SCRITTURA SU FILE DELLE RICHIESTE SENZA SLA
-----------------------------------------------------------------
UTL_FILE.put_line (file_out, 'ID_RICHIESTA;MSISDN;CAMPI;');
OPEN c_aom;
app_campi := 'Richiesta non soggetta a SLA';
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH c_aom INTO app_c_aom;
EXIT WHEN c_aom%NOTFOUND;
-- Cursore per le richieste di cui calcolare gli SLA
-- RECIPIENT STANDARD
OPEN cur_richiesta;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta INTO app_id_richiesta;
EXIT WHEN cur_richiesta%NOTFOUND;
-----------------------------------------------------------------
-- Estrazione dati richiesta per un AOM e per una determinata richiesta
--- RECIPIENT STANDARD
-----------------------------------------------------------------
app_aom_don := NULL;
app_msisdn := NULL;
app_select := '7';
BEGIN
SELECT aom_donor, d.id_richiesta, msisdn
INTO app_aom_don, app_id_richiesta, app_msisdn
FROM mnp_dw_rec_online d,
(SELECT SUM (sla_tre) AS sla_tre
FROM mnp_dw_rec_tp_online
WHERE mnp_dw_rec_tp_online.id_richiesta =
app_id_richiesta) sla_tp
WHERE d.id_richiesta = app_id_richiesta
AND sla_zero = 0
AND sla_uno = 0
AND sla_due = 0
AND sla_tp.sla_tre = 0;
------------ Scrive i dati della RICHIESTA se non SLA
UTL_FILE.put_line (
file_out,
''''
|| app_id_richiesta
|| ''''
|| ';'
|| ''''
|| app_msisdn
|| ''''
|| ';'
|| app_campi
|| ';'
);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
app_id_richiesta := NULL;
END;
END LOOP; -- richiesta
CLOSE cur_richiesta;
OPEN cur_richiesta_hoc;
-- Per ogni richiesta di cui devo calcolare gli SLA
LOOP
FETCH cur_richiesta_hoc INTO app_id_richiesta;
EXIT WHEN cur_richiesta_hoc%NOTFOUND;
-----------------------------------------------------------------
-- Estrazione dati richiesta per un AOM e per una determinata richiesta
--- RECIPIENT HOC
-----------------------------------------------------------------
app_aom_don := NULL;
app_msisdn := NULL;
app_select := '8';
BEGIN
SELECT aom_donor, d.id_richiesta, msisdn
INTO app_aom_don, app_id_richiesta, app_msisdn
FROM mnp_dw_rec_hoc_online d,
(SELECT SUM (sla_tre) AS sla_tre
FROM mnp_dw_rec_hoc_tp_online
WHERE mnp_dw_rec_hoc_tp_online.id_richiesta =
app_id_richiesta) sla_hoc_tp
WHERE d.id_richiesta = app_id_richiesta
AND sla_zero = 0
AND sla_uno = 0
AND sla_due = 0
AND sla_hoc_tp.sla_tre = 0;
------------ Scrive i dati della RICHIESTA se non SLA
UTL_FILE.put_line (
file_out,
''''
|| app_id_richiesta
|| ''''
|| ';'
|| ''''
|| app_msisdn
|| ''''
|| ';'
|| app_campi
|| ';'
);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
app_id_richiesta := NULL;
END;
END LOOP; -- richiesta
CLOSE cur_richiesta_hoc;
END LOOP; --aom
CLOSE c_aom;
-- Per ogni richiesta di cui devo calcolare gli SLA
app_c_aom := 'TIMT';
OPEN cur_richiesta_tacs;
LOOP
FETCH cur_richiesta_tacs INTO app_id_richiesta;
EXIT WHEN cur_richiesta_tacs%NOTFOUND;
-----------------------------------------------------------------
-- Estrazione dati richiesta per un AOM e per una determinata richiesta
--- RECIPIENT SCIVOLO TACS
-----------------------------------------------------------------
app_aom_don := NULL;
app_msisdn := NULL;
app_select := '9';
BEGIN
SELECT aom_donor, d.id_richiesta, msisdn
INTO app_aom_don, app_id_richiesta, app_msisdn
FROM mnp_dw_rec_tacs_online d,
(SELECT SUM (sla_tre) AS sla_tre
FROM mnp_dw_rec_tacs_tp_online
WHERE mnp_dw_rec_tacs_tp_online.id_richiesta =
app_id_richiesta) sla_tacs_tp
WHERE d.id_richiesta = app_id_richiesta AND sla_tacs_tp.sla_tre = 0;
------------ Scrive i dati della RICHIESTA se non SLA
UTL_FILE.put_line (
file_out,
''''
|| app_id_richiesta
|| ''''
|| ';'
|| ''''
|| app_msisdn
|| ''''
|| ';'
|| app_campi
|| ';'
);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
app_id_richiesta := NULL;
END;
END LOOP; -- richiesta
CLOSE cur_richiesta_tacs;
UTL_FILE.fflush (file_out);
UTL_FILE.fclose (file_out);
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line (
'Errore in REPORT_ANALITICO_SLA_RECIPIENT_ON_DEMAND : (SEL '
|| app_select
|| ' ) - '
|| SQLERRM
);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,115 @@
CREATE OR REPLACE PROCEDURE UPDATE_DONOR_DELTA (
mese_in IN NUMBER,
anno_in IN NUMBER,
cod_errore IN OUT NUMBER
)
IS
-- Purpose: Inserimento dei dati aggiornati al mese di riferimento nella
-- tabella mnp_dw_donor_delta
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- L.Marcucci 16/08/2004 -------------------------------------------
primo_giorno_mese DATE;
-- Primo giorno lavorativo del mese di riferiemnto
ultimo_giorno_mese DATE;
-- Ultimo giorno lavorativo del mese di riferiemnto
errore NUMBER (1);
BEGIN
cod_errore := 0;
primo_giorno_mese := dwh.fun_primo_giorno_lavorativo (mese_in, anno_in);
ultimo_giorno_mese := dwh.fun_ultimo_giorno_lavorativo (mese_in, anno_in);
DELETE FROM dwh.mnp_dw_donor_delta;
COMMIT;
-- Inserimento di tutte le richieste donor standard
-- che ancora non hanno raggiunto uno stato finale o lo hanno raggiunto nel
-- mese di riferimento
INSERT INTO dwh.mnp_dw_donor_delta
(id_richiesta, aom_recipient, msisdn, tipo_linea,
codice_fiscale_partita_iva, data_ricezione_richiesta,
data_validazione_max, data_cut_over_calc, presaincarico_ko, marcaggio)
SELECT gr.id_richiesta, gr.codice_operatore_recipient, gr.msisdn,
gr.tipo_cliente, gr.codice_fiscale_partita_iva,
gr.dataricezionerichiesta, gr.data_validazione_max,
gr.data_cut_over_calc,
DECODE (gr.cod_controllo_presaincarico, -1, 1, 6, 0, 1), marcaggio
FROM mnp.mnp_gestione_richiesta gr
WHERE gr.richiestaadhoc = '0'
AND gr.richiestaadhocaom = '0'
AND gr.dataricezionerichiesta >= to_date('26-APR-2004','dd-MON-YYYY')
AND gr.dataricezionerichiesta <= ultimo_giorno_mese
AND ( gr.data_fine_processo IS NULL
OR (gr.data_fine_processo >= primo_giorno_mese)
);
COMMIT;
-- aggiornamento del campo marcaggio delle richieste consumenr con il valore 'C'
UPDATE dwh.mnp_dw_donor_delta dw
SET marcaggio = 'C'
WHERE dw.tipo_linea = 'CO';
COMMIT;
-- aggiornamento dei campi non presenti nella tabella di gestione richiesta
dwh.update_donor_delta_2 (ultimo_giorno_mese, errore);
IF errore = 0
THEN
-- merge della tabella mnp_dw_donor_delta nella tabella mnp_dw_donor
MERGE INTO dwh.mnp_dw_donor t
USING dwh.mnp_dw_donor_delta s
ON (t.id_richiesta = s.id_richiesta)
WHEN MATCHED THEN
UPDATE
SET t.aom_recipient = s.aom_recipient, t.msisdn = s.msisdn,
t.tipo_linea = s.tipo_linea, t.marcaggio = s.marcaggio,
t.codice_fiscale_partita_iva =
s.codice_fiscale_partita_iva,
t.data_ricezione_richiesta = s.data_ricezione_richiesta,
t.data_presa_in_carico = s.data_presa_in_carico,
t.data_invio_ai_sistemi_commer =
s.data_invio_ai_sistemi_commer,
t.data_validazione_max = s.data_validazione_max,
t.data_validazione = s.data_validazione,
t.data_ricezione_da_ccrmbit = s.data_ricezione_da_ccrmbit,
t.data_cut_over_calc = s.data_cut_over_calc,
t.data_cut_over_eff = s.data_cut_over_eff,
t.causale_rifiuto = s.causale_rifiuto,
t.data_espletamento = s.data_espletamento,
t.stato = s.stato,
t.data_stato_finale = s.data_stato_finale,
t.presaincarico_ko = s.presaincarico_ko
WHEN NOT MATCHED THEN
INSERT (id_richiesta, aom_recipient, msisdn, tipo_linea,
marcaggio, codice_fiscale_partita_iva,
data_ricezione_richiesta, data_presa_in_carico,
data_invio_ai_sistemi_commer, data_validazione_max,
data_validazione, data_ricezione_da_ccrmbit,
data_cut_over_calc, data_cut_over_eff, causale_rifiuto,
data_espletamento, stato, data_stato_finale,
presaincarico_ko)
VALUES (s.id_richiesta, s.aom_recipient, s.msisdn, s.tipo_linea,
s.marcaggio, s.codice_fiscale_partita_iva,
s.data_ricezione_richiesta, s.data_presa_in_carico,
s.data_invio_ai_sistemi_commer, s.data_validazione_max,
s.data_validazione, s.data_ricezione_da_ccrmbit,
s.data_cut_over_calc, s.data_cut_over_eff,
s.causale_rifiuto, s.data_espletamento, s.stato,
s.data_stato_finale, s.presaincarico_ko);
COMMIT;
ELSE
cod_errore := 1;
END IF;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_DONOR_DELTA ' || SQLERRM);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,129 @@
CREATE OR REPLACE PROCEDURE UPDATE_DONOR_DELTA_2 (
ultimo_giorno_mese IN DATE,
errore IN OUT NUMBER
)
IS
-- Purpose: Aggiornamento dei dati relativi al mese di riferimento che non si
-- trovano nella tabella di gestione richiesta
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- L.Marcucci 16/08/2004 -------------------------------------------
app_id_richiesta dwh.mnp_dw_donor_delta.id_richiesta%TYPE;
-- ID della richiesta
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta
FROM dwh.mnp_dw_donor_delta;
BEGIN
errore := 0;
OPEN cur_richiesta;
LOOP
FETCH cur_richiesta
INTO app_id_richiesta;
EXIT WHEN cur_richiesta%NOTFOUND;
-- Aggiornamento dello stato e della data di transizione di stato
UPDATE dwh.mnp_dw_donor_delta dw
SET (dw.stato, dw.data_stato_finale) =
(SELECT stato_a, data_lavorazione
FROM (SELECT sr.stato_a, sr.data_lavorazione
FROM mnp.mnp_storico_richiesta sr
WHERE sr.id_richiesta = app_id_richiesta
AND sr.data_lavorazione <= ultimo_giorno_mese
ORDER BY sr.data_i_o DESC)
WHERE ROWNUM = 1)
WHERE dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di invio del file XML di presaincarico
UPDATE dwh.mnp_dw_donor_delta dw
SET dw.data_presa_in_carico =
(SELECT MIN (TRUNC (xo.data_invio))
FROM mnp.mnp_xml_out xo, mnp.mnp_xml_richiesta_out xro
WHERE xo.tipo_file = '5'
AND xo.da_inviare IN (0, 2)
AND xo.nome_file = xro.nome_file
AND xro.id_richiesta = app_id_richiesta
AND dw.presaincarico_ko = 1
AND TRUNC (xo.data_invio) <= ultimo_giorno_mese)
WHERE dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di invio delle liste di validazione ai
-- sistemi commerciali per le richieste Business
UPDATE dwh.mnp_dw_donor_delta dw
SET dw.data_invio_ai_sistemi_commer =
(SELECT MIN (data_invio)
FROM mnp.mnp_crm_validazione_out cvo
WHERE cvo.id_richiesta = app_id_richiesta)
WHERE dw.tipo_linea = 'BU' AND dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di invio delle liste di validazione ai
-- sistemi commerciali per le richieste Consumer
UPDATE dwh.mnp_dw_donor_delta dw
SET dw.data_invio_ai_sistemi_commer =
(SELECT MIN (data_invio)
FROM mnp.mnp_crm_validazione_out cvo
WHERE cvo.id_richiesta = app_id_richiesta
AND cvo.stato = 'IN VALIDAZIONE')
WHERE dw.tipo_linea = 'CO' AND dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di invio del file XML di validazione
UPDATE dwh.mnp_dw_donor_delta dw
SET dw.data_validazione =
(SELECT MIN (TRUNC (data_invio))
FROM mnp.mnp_xml_out xo, mnp.mnp_xml_richiesta_out xro
WHERE xo.tipo_file = '2'
AND xo.da_inviare IN (0, 2)
AND xo.nome_file = xro.nome_file
AND xro.id_richiesta = app_id_richiesta
AND TRUNC (xo.data_invio) <= ultimo_giorno_mese)
WHERE dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di ricezione delle liste di validazione dai
-- sistemi commerciali
UPDATE dwh.mnp_dw_donor_delta dw
SET dw.data_ricezione_da_ccrmbit =
(SELECT MIN (data_ricezione)
FROM mnp.mnp_crm_validazione_in cvi
WHERE cvi.id_richiesta = app_id_richiesta)
WHERE dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di cessazione effettiva ricevuta da MSS
UPDATE dwh.mnp_dw_donor_delta dw
SET dw.data_cut_over_eff =
(SELECT MIN (TRUNC (data_ora_cessazione))
FROM mnp.mnp_mss_cessazione_in mci
WHERE mci.id_richiesta = app_id_richiesta)
WHERE dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di invio del file XML di espletamento
UPDATE dwh.mnp_dw_donor_delta dw
SET dw.data_espletamento =
(SELECT MIN (TRUNC (data_invio))
FROM mnp.mnp_xml_out xo, mnp.mnp_xml_richiesta_out xro
WHERE xo.tipo_file = '6'
AND xo.da_inviare IN (0, 2)
AND xo.nome_file = xro.nome_file
AND xro.id_richiesta = app_id_richiesta
AND TRUNC (xo.data_invio) <= ultimo_giorno_mese
AND xo.destinatario <> 'NPTS')
WHERE dw.id_richiesta = app_id_richiesta;
COMMIT;
END LOOP;
CLOSE cur_richiesta;
EXCEPTION
WHEN OTHERS
THEN
errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_DONOR_DELTA_2 ' || SQLERRM);
RETURN;
END;
/

View File

@@ -0,0 +1,112 @@
CREATE OR REPLACE PROCEDURE UPDATE_DONOR_HOC_DELTA (
mese_in IN NUMBER,
anno_in IN NUMBER,
cod_errore IN OUT NUMBER
)
IS
-- Purpose: Aggiornamento al mese di riferimento della tabella mnp_dw_donor_hoc_delta
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- L.Marcucci 16/08/2004 -------------------------------------------
primo_giorno_mese DATE;
-- Primo giorno lavorativo del mese di riferiemnto
ultimo_giorno_mese DATE;
-- Ultimo giorno lavorativo del mese di riferiemnto
errore NUMBER (1) := 0;
BEGIN
cod_errore := 0;
primo_giorno_mese := dwh.fun_primo_giorno_lavorativo (mese_in, anno_in);
ultimo_giorno_mese := dwh.fun_ultimo_giorno_lavorativo (mese_in, anno_in);
DELETE FROM dwh.mnp_dw_donor_hoc_delta;
COMMIT;
-- Inserimento di tutte le richieste donor ad hoc
-- che ancora non hanno raggiunto uno stato finale o lo hanno raggiunto nel
-- mese di riferimento
INSERT INTO dwh.mnp_dw_donor_hoc_delta
(id_richiesta, aom_recipient, msisdn, tipo_linea,
codice_fiscale_partita_iva, data_ricezione_richiesta,
data_validazione_max, data_cut_over_calc, presaincarico_ko, marcaggio)
SELECT gr.id_richiesta, gr.codice_operatore_recipient, gr.msisdn,
gr.tipo_cliente, gr.codice_fiscale_partita_iva,
gr.dataricezionerichiesta, gr.data_validazione_max,
gr.data_cut_over_calc,
DECODE (gr.cod_controllo_presaincarico, -1, 1, 6, 0, 1), marcaggio
FROM mnp.mnp_gestione_richiesta gr
WHERE (gr.richiestaadhoc = '1' OR gr.richiestaadhocaom = '1')
AND gr.dataricezionerichiesta >= to_date('26-APR-2004','dd-MON-YYYY')
AND gr.dataricezionerichiesta <= ultimo_giorno_mese
AND ( gr.data_fine_processo IS NULL
OR (gr.data_fine_processo >= primo_giorno_mese)
);
COMMIT;
-- aggiornamento del campo marcaggio delle richieste business con il valore 'C'
UPDATE dwh.mnp_dw_donor_hoc_delta dw
SET marcaggio = 'C'
WHERE dw.tipo_linea = 'CO';
COMMIT;
-- aggiornamento dei campi non presenti nella tabella di gestione richiesta
dwh.update_donor_hoc_delta_2 (ultimo_giorno_mese, errore);
IF errore = 0
THEN
-- merge della tabella mnp_dw_donor_hoc_delta nella tabella mnp_dw_donor_hoc
MERGE INTO dwh.mnp_dw_donor_hoc t
USING dwh.mnp_dw_donor_hoc_delta s
ON (t.id_richiesta = s.id_richiesta)
WHEN MATCHED THEN
UPDATE
SET t.aom_recipient = s.aom_recipient, t.msisdn = s.msisdn,
t.tipo_linea = s.tipo_linea, t.marcaggio = s.marcaggio,
t.codice_fiscale_partita_iva =
s.codice_fiscale_partita_iva,
t.data_ricezione_richiesta = s.data_ricezione_richiesta,
t.data_presa_in_carico = s.data_presa_in_carico,
t.data_invio_ai_sistemi_commer =
s.data_invio_ai_sistemi_commer,
t.data_validazione_max = s.data_validazione_max,
t.data_prima_validazione = s.data_prima_validazione,
t.data_ricezione_da_ccrmbit = s.data_ricezione_da_ccrmbit,
t.data_cut_over_calc = s.data_cut_over_calc,
t.data_cut_over_eff = s.data_cut_over_eff,
t.causale_rifiuto = s.causale_rifiuto,
t.data_espletamento = s.data_espletamento,
t.stato = s.stato,
t.data_stato_finale = s.data_stato_finale,
t.presaincarico_ko = s.presaincarico_ko
WHEN NOT MATCHED THEN
INSERT (id_richiesta, aom_recipient, msisdn, tipo_linea,
marcaggio, codice_fiscale_partita_iva,
data_ricezione_richiesta, data_presa_in_carico,
data_invio_ai_sistemi_commer, data_validazione_max,
data_prima_validazione, data_ricezione_da_ccrmbit,
data_cut_over_calc, data_cut_over_eff, causale_rifiuto,
data_espletamento, stato, data_stato_finale,
presaincarico_ko)
VALUES (s.id_richiesta, s.aom_recipient, s.msisdn, s.tipo_linea,
s.marcaggio, s.codice_fiscale_partita_iva,
s.data_ricezione_richiesta, s.data_presa_in_carico,
s.data_invio_ai_sistemi_commer, s.data_validazione_max,
s.data_prima_validazione, s.data_ricezione_da_ccrmbit,
s.data_cut_over_calc, s.data_cut_over_eff,
s.causale_rifiuto, s.data_espletamento, s.stato,
s.data_stato_finale, s.presaincarico_ko);
COMMIT;
ELSE
cod_errore := 1;
END IF;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_DONOR_HOC_DELTA ' || SQLERRM);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,126 @@
CREATE OR REPLACE PROCEDURE UPDATE_DONOR_HOC_DELTA_2 (
ultimo_giorno_mese IN DATE,
errore IN OUT NUMBER
)
IS
-- Purpose: Aggiornamento dei dati relativi al mese di riferimento che non si
-- trovano nella tabella di gestione richiesta
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- L.Marcucci 16/08/2004 -------------------------------------------
app_id_richiesta dwh.mnp_dw_donor_hoc_delta.id_richiesta%TYPE;
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta
FROM dwh.mnp_dw_donor_hoc_delta;
BEGIN
errore := 0;
OPEN cur_richiesta;
LOOP
FETCH cur_richiesta
INTO app_id_richiesta;
EXIT WHEN cur_richiesta%NOTFOUND;
-- Aggiornamento dello stato e della data di transizione
UPDATE dwh.mnp_dw_donor_hoc_delta dw
SET (dw.stato, dw.data_stato_finale) =
(SELECT stato_a, data_lavorazione
FROM (SELECT sr.stato_a, sr.data_lavorazione
FROM mnp.mnp_storico_richiesta sr
WHERE sr.id_richiesta = app_id_richiesta
AND sr.data_lavorazione <= ultimo_giorno_mese
ORDER BY sr.data_i_o DESC)
WHERE ROWNUM = 1)
WHERE dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di invio del file XML di presaincarico
UPDATE dwh.mnp_dw_donor_hoc_delta dw
SET data_presa_in_carico =
(SELECT MIN (TRUNC (xo.data_invio))
FROM mnp.mnp_xml_out xo, mnp.mnp_xml_richiesta_out xro
WHERE xo.tipo_file = 5
AND xo.da_inviare IN (0, 2)
AND xo.nome_file = xro.nome_file
AND xro.id_richiesta = app_id_richiesta
AND dw.presaincarico_ko = 1
AND TRUNC (xo.data_invio) <= ultimo_giorno_mese)
WHERE dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di invio delle liste di validazione ai
-- sistemi commerciali per le richieste Business
UPDATE dwh.mnp_dw_donor_hoc_delta dw
SET data_invio_ai_sistemi_commer =
(SELECT MIN (data_invio)
FROM mnp.mnp_crm_validazione_out cvo
WHERE cvo.id_richiesta = app_id_richiesta)
WHERE dw.tipo_linea = 'BU' AND dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di invio delle liste di validazione ai
-- sistemi commerciali per le richieste Consumer
UPDATE dwh.mnp_dw_donor_hoc_delta dw
SET data_invio_ai_sistemi_commer =
(SELECT MIN (data_invio)
FROM mnp.mnp_crm_validazione_out cvo
WHERE cvo.id_richiesta = app_id_richiesta
AND cvo.stato = 'IN VALIDAZIONE')
WHERE dw.tipo_linea = 'CO' AND dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di invio del file XML di prima validazione
UPDATE dwh.mnp_dw_donor_hoc_delta dw
SET data_prima_validazione =
(SELECT MIN (TRUNC (data_invio))
FROM mnp.mnp_xml_out xo, mnp.mnp_xml_richiesta_out xro
WHERE xo.tipo_file = '2'
AND xo.da_inviare IN (0, 2)
AND xo.nome_file = xro.nome_file
AND xro.id_richiesta = app_id_richiesta
AND TRUNC (xo.data_invio) <= ultimo_giorno_mese)
WHERE dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di ricezione delle liste di validazione dai
-- sistemi commerciali
UPDATE dwh.mnp_dw_donor_hoc_delta dw
SET data_ricezione_da_ccrmbit =
(SELECT MIN (data_ricezione)
FROM mnp.mnp_crm_validazione_in cvi
WHERE cvi.id_richiesta = app_id_richiesta)
WHERE dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di cessazione effettiva ricevuta da MSS
UPDATE dwh.mnp_dw_donor_hoc_delta dw
SET data_cut_over_eff = (SELECT MIN (TRUNC (data_ora_cessazione))
FROM mnp.mnp_mss_cessazione_in mci
WHERE mci.id_richiesta = app_id_richiesta)
WHERE dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di invio del file XML di espletamento
UPDATE dwh.mnp_dw_donor_hoc_delta dw
SET data_espletamento =
(SELECT MIN (TRUNC (data_invio))
FROM mnp.mnp_xml_out xo, mnp.mnp_xml_richiesta_out xro
WHERE xo.tipo_file = '6'
AND xo.da_inviare IN (0, 2)
AND xo.nome_file = xro.nome_file
AND xro.id_richiesta = app_id_richiesta
AND TRUNC (xo.data_invio) <= ultimo_giorno_mese
AND xo.destinatario <> 'NPTS')
WHERE dw.id_richiesta = app_id_richiesta;
COMMIT;
END LOOP;
CLOSE cur_richiesta;
EXCEPTION
WHEN OTHERS
THEN
errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_DONOR_HOC_DELTA_2 ' || SQLERRM);
RETURN;
END;
/

View File

@@ -0,0 +1,119 @@
CREATE OR REPLACE PROCEDURE UPDATE_DONOR_HOC_ONLINE_2 (errore IN OUT NUMBER)
IS
-- Purpose: Aggiornamento dei dati relativi al mese di riferimento che non si
-- trovano nella tabella di gestione richiesta
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- L.Marcucci 12/10/2004 -------------------------------------------
app_id_richiesta dwh.mnp_dw_donor_hoc_online.id_richiesta%TYPE;
app_stato dwh.mnp_dw_donor_hoc_online.stato%TYPE;
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta, stato
FROM dwh.mnp_dw_donor_hoc_online;
BEGIN
errore := 0;
OPEN cur_richiesta;
LOOP
FETCH cur_richiesta
INTO app_id_richiesta, app_stato;
EXIT WHEN cur_richiesta%NOTFOUND;
-- Aggiornamento della data di transizione di stato
UPDATE dwh.mnp_dw_donor_hoc_online dw
SET (dw.data_stato_finale) =
(SELECT MAX (sr.data_lavorazione)
FROM mnp.mnp_storico_richiesta sr
WHERE sr.id_richiesta = app_id_richiesta
AND sr.stato_a = app_stato)
WHERE dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di invio del file XML di presaincarico
UPDATE dwh.mnp_dw_donor_hoc_online dw
SET data_presa_in_carico =
(SELECT MIN (TRUNC (xo.data_invio))
FROM mnp.mnp_xml_out xo, mnp.mnp_xml_richiesta_out xro
WHERE xo.tipo_file = 5
AND xo.da_inviare IN (0, 2)
AND xo.nome_file = xro.nome_file
AND xro.id_richiesta = app_id_richiesta
AND dw.presaincarico_ko = 1)
WHERE dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di invio delle liste di validazione ai
-- sistemi commerciali per le richieste Business
UPDATE dwh.mnp_dw_donor_hoc_online dw
SET data_invio_ai_sistemi_commer =
(SELECT MIN (data_invio)
FROM mnp.mnp_crm_validazione_out cvo
WHERE cvo.id_richiesta = app_id_richiesta)
WHERE dw.tipo_linea = 'BU' AND dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di invio delle liste di validazione ai
-- sistemi commerciali per le richieste Consumer
UPDATE dwh.mnp_dw_donor_hoc_online dw
SET data_invio_ai_sistemi_commer =
(SELECT MIN (data_invio)
FROM mnp.mnp_crm_validazione_out cvo
WHERE cvo.id_richiesta = app_id_richiesta
AND cvo.stato = 'IN VALIDAZIONE')
WHERE dw.tipo_linea = 'CO' AND dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di invio del file XML di prima validazione
UPDATE dwh.mnp_dw_donor_hoc_online dw
SET data_prima_validazione =
(SELECT MIN (TRUNC (data_invio))
FROM mnp.mnp_xml_out xo, mnp.mnp_xml_richiesta_out xro
WHERE xo.tipo_file = '2'
AND xo.da_inviare IN (0, 2)
AND xo.nome_file = xro.nome_file
AND xro.id_richiesta = app_id_richiesta
)
WHERE dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di ricezione delle liste di validazione dai
-- sistemi commerciali
UPDATE dwh.mnp_dw_donor_hoc_online dw
SET data_ricezione_da_ccrmbit =
(SELECT MIN (data_ricezione)
FROM mnp.mnp_crm_validazione_in cvi
WHERE cvi.id_richiesta = app_id_richiesta)
WHERE dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di cessazione effettiva ricevuta da MSS
UPDATE dwh.mnp_dw_donor_hoc_online dw
SET data_cut_over_eff = (SELECT MIN (TRUNC (data_ora_cessazione))
FROM mnp.mnp_mss_cessazione_in mci
WHERE mci.id_richiesta = app_id_richiesta)
WHERE dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di invio del file XML di espletamento
UPDATE dwh.mnp_dw_donor_hoc_online dw
SET data_espletamento =
(SELECT MIN (TRUNC (data_invio))
FROM mnp.mnp_xml_out xo, mnp.mnp_xml_richiesta_out xro
WHERE xo.tipo_file = '6'
AND xo.da_inviare IN (0, 2)
AND xo.nome_file = xro.nome_file
AND xro.id_richiesta = app_id_richiesta
AND xo.destinatario <> 'NPTS')
WHERE dw.id_richiesta = app_id_richiesta;
COMMIT;
END LOOP;
CLOSE cur_richiesta;
EXCEPTION
WHEN OTHERS
THEN
errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_DONOR_HOC_ONLINE_2 ' || SQLERRM);
RETURN;
END;
/

View File

@@ -0,0 +1,59 @@
CREATE OR REPLACE PROCEDURE UPDATE_DONOR_HOC_ONLINE_ID (cod_errore IN OUT NUMBER)
IS
-- Purpose:
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- L.Marcucci 12/10/2004 -------------------------------------------
errore NUMBER (1) := 0;
BEGIN
cod_errore := 0;
DELETE FROM dwh.mnp_dw_donor_hoc_online;
COMMIT;
-- Inserimento di tutte le richieste donor ad hoc
-- che ancora non hanno raggiunto uno stato finale o lo hanno raggiunto nel
-- mese di riferimento
INSERT INTO dwh.mnp_dw_donor_hoc_online
(id_richiesta, aom_recipient, msisdn, tipo_linea,
codice_fiscale_partita_iva, data_ricezione_richiesta,
data_validazione_max, data_cut_over_calc, presaincarico_ko,
marcaggio, stato)
SELECT gr.id_richiesta, gr.codice_operatore_recipient, gr.msisdn,
gr.tipo_cliente, gr.codice_fiscale_partita_iva,
gr.dataricezionerichiesta, gr.data_validazione_max,
gr.data_cut_over_calc,
DECODE (gr.cod_controllo_presaincarico, -1, 1, 6, 0, 1),
marcaggio, stato
FROM mnp.mnp_gestione_richiesta gr, mnp_dw_donor_tp_in_richiesta dim
WHERE gr.id_richiesta = dim.id_richiesta
AND (gr.richiestaadhoc = '1' OR gr.richiestaadhocaom = '1')
AND gr.dataricezionerichiesta >=
TO_DATE ('26-APR-2004', 'dd-MON-YYYY');
COMMIT;
-- aggiornamento del campo marcaggio delle richieste business con il valore 'C'
UPDATE dwh.mnp_dw_donor_hoc_online dw
SET marcaggio = 'C'
WHERE dw.tipo_linea = 'CO';
COMMIT;
-- aggiornamento dei campi non presenti nella tabella di gestione richiesta
dwh.update_donor_hoc_online_2 (errore);
IF errore = 0
THEN
dwh.calcola_sla_donor_hoc_online (errore);
END IF;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_DONOR_HOC_ONLINE_ID ' || SQLERRM
);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,59 @@
CREATE OR REPLACE PROCEDURE UPDATE_DONOR_HOC_ONLINE_MSISDN (cod_errore IN OUT NUMBER)
IS
-- Purpose:
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- L.Marcucci 12/10/2004 -------------------------------------------
errore NUMBER (1) := 0;
BEGIN
cod_errore := 0;
DELETE FROM dwh.mnp_dw_donor_hoc_online;
COMMIT;
-- Inserimento di tutte le richieste donor ad hoc
-- che ancora non hanno raggiunto uno stato finale o lo hanno raggiunto nel
-- mese di riferimento
INSERT INTO dwh.mnp_dw_donor_hoc_online
(id_richiesta, aom_recipient, msisdn, tipo_linea,
codice_fiscale_partita_iva, data_ricezione_richiesta,
data_validazione_max, data_cut_over_calc, presaincarico_ko,
marcaggio, stato)
SELECT gr.id_richiesta, gr.codice_operatore_recipient, gr.msisdn,
gr.tipo_cliente, gr.codice_fiscale_partita_iva,
gr.dataricezionerichiesta, gr.data_validazione_max,
gr.data_cut_over_calc,
DECODE (gr.cod_controllo_presaincarico, -1, 1, 6, 0, 1),
marcaggio, stato
FROM mnp.mnp_gestione_richiesta gr, mnp_dw_donor_tp_in_msisdn dim
WHERE gr.msisdn = dim.msisdn
AND (gr.richiestaadhoc = '1' OR gr.richiestaadhocaom = '1')
AND gr.dataricezionerichiesta >=
TO_DATE ('26-APR-2004', 'dd-MON-YYYY');
COMMIT;
-- aggiornamento del campo marcaggio delle richieste business con il valore 'C'
UPDATE dwh.mnp_dw_donor_hoc_online dw
SET marcaggio = 'C'
WHERE dw.tipo_linea = 'CO';
COMMIT;
-- aggiornamento dei campi non presenti nella tabella di gestione richiesta
dwh.update_donor_hoc_online_2 (errore);
IF errore = 0
THEN
dwh.calcola_sla_donor_hoc_online (errore);
END IF;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_DONOR_HOC_ONLINE_ID ' || SQLERRM
);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,120 @@
CREATE OR REPLACE PROCEDURE UPDATE_DONOR_ONLINE_2 (errore IN OUT NUMBER)
IS
-- Purpose: Aggiornamento dei dati relativi al mese di riferimento che non si
-- trovano nella tabella di gestione richiesta
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- L.Marcucci 16/08/2004 -------------------------------------------
app_id_richiesta dwh.mnp_dw_donor_online.id_richiesta%TYPE;
-- ID della richiesta
app_stato dwh.mnp_dw_donor_online.stato%TYPE;
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta, stato
FROM dwh.mnp_dw_donor_online;
BEGIN
errore := 0;
OPEN cur_richiesta;
LOOP
FETCH cur_richiesta
INTO app_id_richiesta, app_stato;
EXIT WHEN cur_richiesta%NOTFOUND;
-- Aggiornamento della data di transizione di stato
UPDATE dwh.mnp_dw_donor_online dw
SET (dw.data_stato_finale) =
(SELECT max(sr.data_lavorazione)
FROM mnp.mnp_storico_richiesta sr
WHERE sr.id_richiesta = app_id_richiesta
AND sr.stato_a = app_stato)
WHERE dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di invio del file XML di presaincarico
UPDATE dwh.mnp_dw_donor_online dw
SET dw.data_presa_in_carico =
(SELECT MIN (TRUNC (xo.data_invio))
FROM mnp.mnp_xml_out xo, mnp.mnp_xml_richiesta_out xro
WHERE xo.tipo_file = '5'
AND xo.da_inviare IN (0, 2)
AND xo.nome_file = xro.nome_file
AND xro.id_richiesta = app_id_richiesta
AND dw.presaincarico_ko = 1)
WHERE dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di invio delle liste di validazione ai
-- sistemi commerciali per le richieste Business
UPDATE dwh.mnp_dw_donor_online dw
SET dw.data_invio_ai_sistemi_commer =
(SELECT MIN (data_invio)
FROM mnp.mnp_crm_validazione_out cvo
WHERE cvo.id_richiesta = app_id_richiesta)
WHERE dw.tipo_linea = 'BU' AND dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di invio delle liste di validazione ai
-- sistemi commerciali per le richieste Consumer
UPDATE dwh.mnp_dw_donor_online dw
SET dw.data_invio_ai_sistemi_commer =
(SELECT MIN (data_invio)
FROM mnp.mnp_crm_validazione_out cvo
WHERE cvo.id_richiesta = app_id_richiesta
AND cvo.stato = 'IN VALIDAZIONE')
WHERE dw.tipo_linea = 'CO' AND dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di invio del file XML di validazione
UPDATE dwh.mnp_dw_donor_online dw
SET dw.data_validazione =
(SELECT MIN (TRUNC (data_invio))
FROM mnp.mnp_xml_out xo, mnp.mnp_xml_richiesta_out xro
WHERE xo.tipo_file = '2'
AND xo.da_inviare IN (0, 2)
AND xo.nome_file = xro.nome_file
AND xro.id_richiesta = app_id_richiesta)
WHERE dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di ricezione delle liste di validazione dai
-- sistemi commerciali
UPDATE dwh.mnp_dw_donor_online dw
SET dw.data_ricezione_da_ccrmbit =
(SELECT MIN (data_ricezione)
FROM mnp.mnp_crm_validazione_in cvi
WHERE cvi.id_richiesta = app_id_richiesta)
WHERE dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di cessazione effettiva ricevuta da MSS
UPDATE dwh.mnp_dw_donor_online dw
SET dw.data_cut_over_eff =
(SELECT MIN (TRUNC (data_ora_cessazione))
FROM mnp.mnp_mss_cessazione_in mci
WHERE mci.id_richiesta = app_id_richiesta)
WHERE dw.id_richiesta = app_id_richiesta;
-- Aggiornamento della data di invio del file XML di espletamento
UPDATE dwh.mnp_dw_donor_online dw
SET dw.data_espletamento =
(SELECT MIN (TRUNC (data_invio))
FROM mnp.mnp_xml_out xo, mnp.mnp_xml_richiesta_out xro
WHERE xo.tipo_file = '6'
AND xo.da_inviare IN (0, 2)
AND xo.nome_file = xro.nome_file
AND xro.id_richiesta = app_id_richiesta
AND xo.destinatario <> 'NPTS')
WHERE dw.id_richiesta = app_id_richiesta;
COMMIT;
END LOOP;
CLOSE cur_richiesta;
EXCEPTION
WHEN OTHERS
THEN
errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_DONOR_ONLINE_2 ' || SQLERRM);
RETURN;
END;
/

View File

@@ -0,0 +1,56 @@
CREATE OR REPLACE PROCEDURE UPDATE_DONOR_ONLINE_ID (cod_errore IN OUT NUMBER)
IS
-- Purpose:
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- L.Marcucci 12/10/2004 -------------------------------------------
errore NUMBER (1);
BEGIN
cod_errore := 0;
DELETE FROM dwh.mnp_dw_donor_online;
COMMIT;
INSERT INTO dwh.mnp_dw_donor_online
(id_richiesta, aom_recipient, msisdn, tipo_linea,
codice_fiscale_partita_iva, data_ricezione_richiesta,
data_validazione_max, data_cut_over_calc, presaincarico_ko,
marcaggio, stato)
SELECT gr.id_richiesta, gr.codice_operatore_recipient, gr.msisdn,
gr.tipo_cliente, gr.codice_fiscale_partita_iva,
gr.dataricezionerichiesta, gr.data_validazione_max,
gr.data_cut_over_calc,
DECODE (gr.cod_controllo_presaincarico, -1, 1, 6, 0, 1),
marcaggio, stato
FROM mnp.mnp_gestione_richiesta gr
WHERE gr.id_richiesta in (select dim.id_richiesta from dwh.mnp_dw_donor_tp_in_richiesta dim)
AND gr.richiestaadhoc = '0'
AND gr.richiestaadhocaom = '0'
AND gr.dataricezionerichiesta >=
TO_DATE ('26-APR-2004', 'dd-MON-YYYY');
COMMIT;
-- aggiornamento del campo marcaggio delle richieste consumenr con il valore 'C'
UPDATE dwh.mnp_dw_donor_online dw
SET marcaggio = 'C'
WHERE dw.tipo_linea = 'CO';
COMMIT;
-- aggiornamento dei campi non presenti nella tabella di gestione richiesta
dwh.update_donor_online_2 (errore);
IF errore = 0
THEN
dwh.calcola_sla_donor_online (errore);
END IF;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_DONOR_ONLINE ' || SQLERRM);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,58 @@
CREATE OR REPLACE PROCEDURE UPDATE_DONOR_ONLINE_MSISDN (cod_errore IN OUT NUMBER)
IS
-- Purpose: Inserimento dei dati aggiornati al mese di riferimento nella
-- tabella mnp_dw_donor_online
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- L.Marcucci 12/10/2004 -------------------------------------------
errore NUMBER (1);
BEGIN
cod_errore := 0;
DELETE FROM dwh.mnp_dw_donor_online;
COMMIT;
INSERT INTO dwh.mnp_dw_donor_online
(id_richiesta, aom_recipient, msisdn, tipo_linea,
codice_fiscale_partita_iva, data_ricezione_richiesta,
data_validazione_max, data_cut_over_calc, presaincarico_ko,
marcaggio, stato)
SELECT gr.id_richiesta, gr.codice_operatore_recipient, gr.msisdn,
gr.tipo_cliente, gr.codice_fiscale_partita_iva,
gr.dataricezionerichiesta, gr.data_validazione_max,
gr.data_cut_over_calc,
DECODE (gr.cod_controllo_presaincarico, -1, 1, 6, 0, 1),
marcaggio, stato
FROM mnp.mnp_gestione_richiesta gr
WHERE gr.msisdn in (select dim.msisdn from mnp_dw_donor_tp_in_msisdn dim)
AND gr.richiestaadhoc = '0'
AND gr.richiestaadhocaom = '0'
AND gr.dataricezionerichiesta >=
TO_DATE ('26-APR-2004', 'dd-MON-YYYY');
COMMIT;
-- aggiornamento del campo marcaggio delle richieste consumenr con il valore 'C'
UPDATE dwh.mnp_dw_donor_online dw
SET marcaggio = 'C'
WHERE dw.tipo_linea = 'CO';
COMMIT;
-- aggiornamento dei campi non presenti nella tabella di gestione richiesta
dwh.update_donor_online_2 (errore);
IF errore = 0
THEN
dwh.calcola_sla_donor_online (errore);
END IF;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_DONOR_ONLINE_MSISDN ' || SQLERRM
);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,79 @@
CREATE OR REPLACE PROCEDURE UPDATE_PORTING_DELTA (
mese_in IN NUMBER,
anno_in IN NUMBER,
cod_errore IN OUT NUMBER
)
IS
primo_giorno_mese DATE;
-- Primo giorno lavorativo del mese di riferiemnto
ultimo_giorno_mese DATE;
-- Ultimo giorno lavorativo del mese di riferiemnto
errore NUMBER (1) := 0;
-- Purpose: Aggiornamento al mese di riferimento della tabella mnp_dw_donor_delta
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- L.Marcucci 16/08/2004 -------------------------------------------
BEGIN
cod_errore := 0;
primo_giorno_mese := dwh.fun_primo_giorno_lavorativo (mese_in, anno_in);
ultimo_giorno_mese := dwh.fun_ultimo_giorno_lavorativo (mese_in, anno_in);
DELETE FROM dwh.mnp_dw_porting_delta;
COMMIT;
INSERT INTO dwh.mnp_dw_porting_delta
(id_richiesta, aom_recipient, msisdn,
data_ricezione_richiesta, data_cut_over_calc)
SELECT gr.id_richiesta, gr.codice_operatore_recipient, gr.msisdn,
gr.dataricezionerichiesta, gr.data_cut_over
FROM mnp.mnp_gestione_richiesta_porting gr
WHERE gr.dataricezionerichiesta >= to_date('26-APR-2004','dd-MON-YYYY')
AND gr.dataricezionerichiesta <= ultimo_giorno_mese
AND ( gr.data_fine_processo IS NULL
OR (gr.data_fine_processo >= primo_giorno_mese)
);
COMMIT;
dwh.update_porting_delta_2 (ultimo_giorno_mese, errore);
IF errore = 0
THEN
MERGE INTO dwh.mnp_dw_porting t
USING dwh.mnp_dw_porting_delta s
ON (t.id_richiesta = s.id_richiesta)
WHEN MATCHED THEN
UPDATE
SET t.aom_recipient = s.aom_recipient, t.msisdn = s.msisdn,
t.data_ricezione_richiesta = s.data_ricezione_richiesta,
t.data_configurazione_teorica =
s.data_configurazione_teorica,
t.data_configurazione_effettiva =
s.data_configurazione_effettiva,
t.data_cut_over_calc = s.data_cut_over_calc,
t.data_cut_over_effettiva = s.data_cut_over_effettiva,
t.stato = s.stato,
t.data_stato_finale = s.data_stato_finale
WHEN NOT MATCHED THEN
INSERT (id_richiesta, aom_recipient, msisdn,
data_ricezione_richiesta, data_configurazione_teorica,
data_configurazione_effettiva, data_cut_over_calc,
data_cut_over_effettiva, stato, data_stato_finale)
VALUES (s.id_richiesta, s.aom_recipient, s.msisdn,
s.data_ricezione_richiesta,
s.data_configurazione_teorica,
s.data_configurazione_effettiva, s.data_cut_over_calc,
s.data_cut_over_effettiva, s.stato, s.data_stato_finale);
COMMIT;
ELSE
cod_errore := 1;
END IF;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_PORTING_DELTA ' || SQLERRM);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,80 @@
CREATE OR REPLACE PROCEDURE UPDATE_PORTING_DELTA_2 (
ultimo_giorno_mese IN DATE,
errore IN OUT NUMBER
)
IS
app_id_richiesta dwh.mnp_dw_porting_delta.id_richiesta%TYPE;
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta
FROM dwh.mnp_dw_porting_delta;
BEGIN
errore := 0;
OPEN cur_richiesta;
-- Per ogni richiesta aggiorno lo stato e la data di transizione
LOOP
FETCH cur_richiesta
INTO app_id_richiesta;
EXIT WHEN cur_richiesta%NOTFOUND;
UPDATE dwh.mnp_dw_porting_delta dw
SET (dw.stato, dw.data_stato_finale) =
(SELECT stato_a, data_i_o
FROM (SELECT sr.stato_a, sr.data_i_o
FROM mnp.mnp_storico_porting sr
WHERE sr.id_richiesta = app_id_richiesta
AND sr.data_lavorazione <= ultimo_giorno_mese
ORDER BY sr.data_i_o DESC)
WHERE ROWNUM = 1)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_porting_delta dw
SET dw.data_configurazione_teorica =
(SELECT MIN (xi.data_eff)
FROM mnp.mnp_xml_in xi, mnp.mnp_xml_richiesta_in xri
WHERE xi.tipo_file = '3'
AND xi.nome_file = xri.nome_file
AND xri.id_richiesta = dw.id_richiesta
AND TRUNC (xi.data_eff) <= ultimo_giorno_mese)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_porting_delta dw
SET dw.data_configurazione_effettiva =
(SELECT MIN (xo.data_invio)
FROM mnp.mnp_xml_out xo,
mnp.mnp_xml_richiesta_out xro,
mnp.mnp_gestione_richiesta_porting rp
WHERE xo.tipo_file = '6'
AND xo.da_inviare IN (0, 2)
AND xo.nome_file = xro.nome_file
AND xro.id_richiesta = dw.id_richiesta
AND dw.id_richiesta = rp.id_richiesta
AND (xro.richiestaxml LIKE '%<STATO_RICHIESTA_NOTIFICA>4%'
)
AND TRUNC (xo.data_invio) <= ultimo_giorno_mese)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_porting_delta dw
SET data_cut_over_effettiva =
(SELECT data_ora_cessazione
FROM mnp.mnp_mss_porting_in mpi
WHERE mpi.id_richiesta = dw.id_richiesta)
WHERE dw.id_richiesta = app_id_richiesta;
COMMIT;
END LOOP;
CLOSE cur_richiesta;
EXCEPTION
WHEN OTHERS
THEN
errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_PORTING_DELTA_2 ' || SQLERRM);
RETURN;
END;
/

View File

@@ -0,0 +1,76 @@
CREATE OR REPLACE PROCEDURE UPDATE_PORTING_ONLINE_2 (errore IN OUT NUMBER)
IS
app_id_richiesta dwh.mnp_dw_porting_delta.id_richiesta%TYPE;
app_stato dwh.mnp_dw_porting_delta.stato%TYPE;
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta, stato
FROM dwh.mnp_dw_porting_online;
BEGIN
errore := 0;
OPEN cur_richiesta;
-- Per ogni richiesta aggiorno lo stato e la data di transizione
LOOP
FETCH cur_richiesta
INTO app_id_richiesta, app_stato;
EXIT WHEN cur_richiesta%NOTFOUND;
-- Aggiornamento della data di transizione di stato
UPDATE dwh.mnp_dw_porting_online dw
SET (dw.data_stato_finale) =
(SELECT MAX (sr.data_lavorazione)
FROM mnp.mnp_storico_porting sr
WHERE sr.id_richiesta = app_id_richiesta
AND sr.stato_a = app_stato)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_porting_delta dw
SET dw.data_configurazione_teorica =
(SELECT MIN (xi.data_eff)
FROM mnp.mnp_xml_in xi, mnp.mnp_xml_richiesta_in xri
WHERE xi.tipo_file = '3'
AND xi.nome_file = xri.nome_file
AND xri.id_richiesta = dw.id_richiesta
)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_porting_delta dw
SET dw.data_configurazione_effettiva =
(SELECT MIN (xo.data_invio)
FROM mnp.mnp_xml_out xo,
mnp.mnp_xml_richiesta_out xro,
mnp.mnp_gestione_richiesta_porting rp
WHERE xo.tipo_file = '6'
AND xo.da_inviare IN (0, 2)
AND xo.nome_file = xro.nome_file
AND xro.id_richiesta = dw.id_richiesta
AND dw.id_richiesta = rp.id_richiesta
AND (xro.richiestaxml LIKE '%<STATO_RICHIESTA_NOTIFICA>4%'
)
)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_porting_delta dw
SET data_cut_over_effettiva =
(SELECT data_ora_cessazione
FROM mnp.mnp_mss_porting_in mpi
WHERE mpi.id_richiesta = dw.id_richiesta)
WHERE dw.id_richiesta = app_id_richiesta;
COMMIT;
END LOOP;
CLOSE cur_richiesta;
EXCEPTION
WHEN OTHERS
THEN
errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_PORTING_ONLINE_2 ' || SQLERRM);
RETURN;
END;
/

View File

@@ -0,0 +1,40 @@
CREATE OR REPLACE PROCEDURE UPDATE_PORTING_ONLINE_ID (cod_errore IN OUT NUMBER)
IS
errore NUMBER (1) := 0;
-- Purpose: Aggiornamento al mese di riferimento della tabella mnp_dw_donor_delta
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- L.Marcucci 16/08/2004 -------------------------------------------
BEGIN
cod_errore := 0;
DELETE FROM dwh.mnp_dw_porting_online;
COMMIT;
INSERT INTO dwh.mnp_dw_porting_online
(id_richiesta, aom_recipient, msisdn,
data_ricezione_richiesta, data_cut_over_calc, stato)
SELECT gr.id_richiesta, gr.codice_operatore_recipient, gr.msisdn,
gr.dataricezionerichiesta, gr.data_cut_over, stato
FROM mnp.mnp_gestione_richiesta_porting gr
WHERE gr.id_richiesta in (select dim.id_richiesta from dwh.mnp_dw_donor_tp_in_richiesta dim)
AND gr.dataricezionerichiesta >=
TO_DATE ('26-APR-2004', 'dd-MON-YYYY');
COMMIT;
dwh.update_porting_online_2 (errore);
IF errore = 0
THEN
dwh.calcola_sla_tp_online (errore);
END IF;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_PORTING_ONLINE_ID ' || SQLERRM);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,42 @@
CREATE OR REPLACE PROCEDURE UPDATE_PORTING_ONLINE_MSISDN (cod_errore IN OUT NUMBER)
IS
errore NUMBER (1) := 0;
-- Purpose: Aggiornamento al mese di riferimento della tabella mnp_dw_donor_delta
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- L.Marcucci 12/10/2004 -------------------------------------------
BEGIN
cod_errore := 0;
DELETE FROM dwh.mnp_dw_porting_online;
COMMIT;
INSERT INTO dwh.mnp_dw_porting_online
(id_richiesta, aom_recipient, msisdn,
data_ricezione_richiesta, data_cut_over_calc, stato)
SELECT gr.id_richiesta, gr.codice_operatore_recipient, gr.msisdn,
gr.dataricezionerichiesta, gr.data_cut_over, stato
FROM mnp.mnp_gestione_richiesta_porting gr
WHERE gr.msisdn in (select dim.msisdn from dwh.mnp_dw_donor_tp_in_msisdn dim)
AND gr.dataricezionerichiesta >=
TO_DATE ('26-APR-2004', 'dd-MON-YYYY');
COMMIT;
dwh.update_porting_online_2 (errore);
IF errore = 0
THEN
dwh.calcola_sla_tp_online (errore);
END IF;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ( 'Errore in UPDATE_PORTING_ONLINE_MSISDN '
|| SQLERRM
);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,126 @@
CREATE OR REPLACE PROCEDURE UPDATE_REC_DELTA (
mese_in IN NUMBER,
anno_in IN NUMBER,
cod_errore IN OUT NUMBER
)
IS
primo_giorno_mese DATE;
-- Primo giorno lavorativo del mese di riferiemnto
ultimo_giorno_mese DATE;
-- Ultimo giorno lavorativo del mese di riferiemnto
errore NUMBER (1) := 0;
-- Purpose: Aggiornamento al mese di riferimento della tabella mnp_dw_donor_delta
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- L.Marcucci 16/08/2004 -------------------------------------------
BEGIN
cod_errore := 0;
primo_giorno_mese := dwh.fun_primo_giorno_lavorativo (mese_in, anno_in);
ultimo_giorno_mese := dwh.fun_ultimo_giorno_lavorativo (mese_in, anno_in);
DELETE FROM dwh.mnp_dw_rec_delta;
COMMIT;
INSERT INTO dwh.mnp_dw_rec_delta
(id_richiesta, aom_donor, msisdn, tipo_linea,
data_ricezione_richiesta, data_validazione_max,
data_cut_over_aom)
SELECT gr.id_richiesta, gr.codice_operatore_donating, gr.msisdn,
gr.tipo_cliente, gr.dataricezionerichiesta,
TRUNC (gr.data_validazione_max), TRUNC (gr.data_cut_over_aom)
FROM mnp.mnp_gestione_richiesta_rec gr
WHERE gr.richiestaadhoc = '0'
AND gr.codice_operatore_donating <> 'TIMT'
AND gr.dataricezionerichiesta >= to_date('26-APR-2004','dd-MON-YYYY')
AND gr.dataricezionerichiesta <= ultimo_giorno_mese
AND ( gr.data_fine_processo IS NULL
OR (gr.data_fine_processo >= primo_giorno_mese)
);
COMMIT;
DELETE FROM dwh.mnp_dw_rec_terzeparti_delta;
COMMIT;
INSERT INTO dwh.mnp_dw_rec_terzeparti_delta
(id_richiesta, aom_terze_parti)
SELECT dwt.id_richiesta, o.desc_olo
FROM dwh.mnp_dw_rec_delta dwt, mnp.mnp_olo o
WHERE o.flag_terze_parti = 1 AND o.desc_olo <> dwt.aom_donor;
COMMIT;
dwh.update_rec_delta_2 (ultimo_giorno_mese, errore);
IF errore = 0
THEN
dwh.update_rec_terze_parti (ultimo_giorno_mese, errore);
IF errore = 0
THEN
MERGE INTO dwh.mnp_dw_rec t
USING dwh.mnp_dw_rec_delta s
ON (t.id_richiesta = s.id_richiesta)
WHEN MATCHED THEN
UPDATE
SET t.aom_donor = s.aom_donor, t.msisdn = s.msisdn,
t.tipo_linea = s.tipo_linea,
t.data_ricezione_richiesta = s.data_ricezione_richiesta,
t.data_invio_ad_aom = s.data_invio_ad_aom,
t.data_presa_in_carico = s.data_presa_in_carico,
t.data_validazione_max = s.data_validazione_max,
t.data_validazione = s.data_validazione,
t.causale_rifiuto = s.causale_rifiuto,
t.data_espletamento_donating =
s.data_espletamento_donating,
t.data_cut_over_aom = s.data_cut_over_aom,
t.stato = s.stato,
t.data_stato_finale = s.data_stato_finale
WHEN NOT MATCHED THEN
INSERT (id_richiesta, aom_donor, msisdn, tipo_linea,
data_ricezione_richiesta, data_invio_ad_aom,
data_presa_in_carico, data_validazione_max,
data_validazione, causale_rifiuto,
data_espletamento_donating, data_cut_over_aom, stato,
data_stato_finale)
VALUES (s.id_richiesta, s.aom_donor, s.msisdn, s.tipo_linea,
s.data_ricezione_richiesta, s.data_invio_ad_aom,
s.data_presa_in_carico, s.data_validazione_max,
s.data_validazione, s.causale_rifiuto,
s.data_espletamento_donating, s.data_cut_over_aom,
s.stato, s.data_stato_finale);
COMMIT;
MERGE INTO dwh.mnp_dw_rec_terzeparti t
USING dwh.mnp_dw_rec_terzeparti_delta s
ON ( t.id_richiesta = s.id_richiesta
AND t.aom_terze_parti = s.aom_terze_parti)
WHEN MATCHED THEN
UPDATE
SET t.data_configurazione_teorica =
s.data_configurazione_teorica,
t.data_configurazione_effettiva =
s.data_configurazione_effettiva
WHEN NOT MATCHED THEN
INSERT (id_richiesta, aom_terze_parti,
data_configurazione_teorica,
data_configurazione_effettiva)
VALUES (s.id_richiesta, s.aom_terze_parti,
s.data_configurazione_teorica,
s.data_configurazione_effettiva);
COMMIT;
ELSE
cod_errore := 1;
END IF;
ELSE
cod_errore := 1;
END IF;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_REC_DELTA ' || SQLERRM);
RETURN;
END;
/

View File

@@ -0,0 +1,110 @@
CREATE OR REPLACE PROCEDURE UPDATE_REC_DELTA_2 (ultimo_giorno_mese IN DATE, errore IN OUT NUMBER)
IS
app_id_richiesta dwh.mnp_dw_rec_delta.id_richiesta%TYPE;
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta
FROM dwh.mnp_dw_rec_delta;
BEGIN
errore := 0;
OPEN cur_richiesta;
-- Per ogni richiesta aggiorno lo stato e la data di transizione
LOOP
FETCH cur_richiesta
INTO app_id_richiesta;
EXIT WHEN cur_richiesta%NOTFOUND;
UPDATE dwh.mnp_dw_rec_delta dw
SET (dw.stato, dw.data_stato_finale) =
(SELECT stato_a, data_i_o
FROM (SELECT sr.stato_a, sr.data_i_o
FROM mnp.mnp_storico_richiesta_rec sr
WHERE sr.id_richiesta = app_id_richiesta
AND sr.data_lavorazione <= ultimo_giorno_mese
ORDER BY sr.data_i_o DESC)
WHERE ROWNUM = 1)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_rec_delta dw
SET data_invio_ad_aom =
(SELECT MIN (TRUNC (xo.data_invio))
FROM mnp.mnp_xml_out xo, mnp.mnp_xml_richiesta_out xro
WHERE xo.tipo_file = '1'
AND xo.da_inviare IN (0, 2)
AND xo.nome_file = xro.nome_file
AND xro.id_richiesta = app_id_richiesta
AND TRUNC (xo.data_invio) <= ultimo_giorno_mese)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_rec_delta dw
SET data_presa_in_carico =
(SELECT MIN (TRUNC (xi.data_eff))
FROM mnp.mnp_xml_in xi, mnp.mnp_xml_richiesta_in xri
WHERE xi.tipo_file = '5'
AND xi.nome_file = xri.nome_file
AND xri.id_richiesta = app_id_richiesta
AND TRUNC (xi.data_eff) <= ultimo_giorno_mese
AND ( xri.richiestaxml LIKE
'%<STATO_RICHIESTA_NOTIFICA>3%'
OR xri.richiestaxml LIKE
'%<STATO_RICHIESTA_NOTIFICA>7%'
OR xri.richiestaxml LIKE
'%<STATO_RICHIESTA_NOTIFICA>8%'
OR xri.richiestaxml LIKE
'%<STATO_RICHIESTA_NOTIFICA>9%'
))
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_rec_delta dw
SET data_validazione =
(SELECT MIN (TRUNC (xi.data_eff))
FROM mnp.mnp_xml_in xi, mnp.mnp_xml_richiesta_in xri
WHERE xi.tipo_file = '2'
AND xi.nome_file = xri.nome_file
AND xri.id_richiesta = app_id_richiesta
AND TRUNC (xi.data_eff) <= ultimo_giorno_mese)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_rec_delta dw
SET causale_rifiuto =
(SELECT causale_accodamento
FROM mnp.mnp_gestione_richiesta_rec gr
WHERE gr.id_richiesta = app_id_richiesta AND gr.stato = 5)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_rec_delta dw
SET causale_rifiuto =
(SELECT gr.codicerifiutovalidazione
FROM mnp.mnp_gestione_richiesta_rec gr
WHERE gr.id_richiesta = app_id_richiesta AND gr.stato = 7)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_rec_delta dw
SET data_espletamento_donating =
(SELECT MIN (TRUNC (xi.data_eff))
FROM mnp.mnp_xml_in xi, mnp.mnp_xml_richiesta_in xri
WHERE xi.tipo_file = '6'
AND xi.nome_file = xri.nome_file
AND xri.id_richiesta = app_id_richiesta
AND xi.mittente = dw.aom_donor
AND xri.richiestaxml LIKE '%<STATO_RICHIESTA_NOTIFICA>4%'
AND TRUNC (xi.data_eff) <= ultimo_giorno_mese)
WHERE dw.id_richiesta = app_id_richiesta;
COMMIT;
END LOOP;
CLOSE cur_richiesta;
EXCEPTION
WHEN OTHERS
THEN
errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_REC_DELTA ' || SQLERRM);
RETURN;
END;
/

View File

@@ -0,0 +1,126 @@
CREATE OR REPLACE PROCEDURE UPDATE_REC_HOC_DELTA (
mese_in IN NUMBER,
anno_in IN NUMBER,
cod_errore IN OUT NUMBER
)
IS
primo_giorno_mese DATE;
-- Primo giorno lavorativo del mese di riferiemnto
ultimo_giorno_mese DATE;
-- Ultimo giorno lavorativo del mese di riferiemnto
errore NUMBER (1) := 0;
-- Purpose: Aggiornamento al mese di riferimento della tabella mnp_dw_donor_delta
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- L.Marcucci 16/08/2004 -------------------------------------------
BEGIN
cod_errore := 0;
primo_giorno_mese := dwh.fun_primo_giorno_lavorativo (mese_in, anno_in);
ultimo_giorno_mese := dwh.fun_ultimo_giorno_lavorativo (mese_in, anno_in);
DELETE FROM dwh.mnp_dw_rec_hoc_delta;
COMMIT;
INSERT INTO dwh.mnp_dw_rec_hoc_delta
(id_richiesta, aom_donor, msisdn, tipo_linea,
data_ricezione_richiesta, data_validazione_max,
data_cut_over_aom)
SELECT gr.id_richiesta, gr.codice_operatore_donating, gr.msisdn,
gr.tipo_cliente, gr.dataricezionerichiesta,
TRUNC (gr.data_validazione_max), TRUNC (gr.data_cut_over_aom)
FROM mnp.mnp_gestione_richiesta_rec gr
WHERE gr.richiestaadhoc = '1'
AND gr.codice_operatore_donating <> 'TIMT'
AND gr.dataricezionerichiesta >= to_date('26-APR-2004','dd-MON-YYYY')
AND gr.dataricezionerichiesta <= ultimo_giorno_mese
AND ( gr.data_fine_processo IS NULL
OR (gr.data_fine_processo >= primo_giorno_mese)
);
COMMIT;
DELETE FROM dwh.mnp_dw_rec_hoc_tp_delta;
COMMIT;
INSERT INTO dwh.mnp_dw_rec_hoc_tp_delta
(id_richiesta, aom_terze_parti)
SELECT dwt.id_richiesta, o.desc_olo
FROM dwh.mnp_dw_rec_hoc_delta dwt, mnp.mnp_olo o
WHERE o.flag_terze_parti = 1 AND o.desc_olo <> dwt.aom_donor;
COMMIT;
dwh.update_rec_hoc_delta_2 (ultimo_giorno_mese, errore);
IF errore = 0
THEN
dwh.update_rec_hoc_terze_parti (ultimo_giorno_mese, errore);
IF errore = 0
THEN
MERGE INTO dwh.mnp_dw_rec_hoc t
USING dwh.mnp_dw_rec_hoc_delta s
ON (t.id_richiesta = s.id_richiesta)
WHEN MATCHED THEN
UPDATE
SET t.aom_donor = s.aom_donor, t.msisdn = s.msisdn,
t.tipo_linea = s.tipo_linea,
t.data_ricezione_richiesta = s.data_ricezione_richiesta,
t.data_invio_ad_aom = s.data_invio_ad_aom,
t.data_presa_in_carico = s.data_presa_in_carico,
t.data_validazione_max = s.data_validazione_max,
t.data_validazione = s.data_validazione,
t.causale_rifiuto = s.causale_rifiuto,
t.data_espletamento_donating =
s.data_espletamento_donating,
t.data_cut_over_aom = s.data_cut_over_aom,
t.stato = s.stato,
t.data_stato_finale = s.data_stato_finale
WHEN NOT MATCHED THEN
INSERT (id_richiesta, aom_donor, msisdn, tipo_linea,
data_ricezione_richiesta, data_invio_ad_aom,
data_presa_in_carico, data_validazione_max,
data_validazione, causale_rifiuto,
data_espletamento_donating, data_cut_over_aom, stato,
data_stato_finale)
VALUES (s.id_richiesta, s.aom_donor, s.msisdn, s.tipo_linea,
s.data_ricezione_richiesta, s.data_invio_ad_aom,
s.data_presa_in_carico, s.data_validazione_max,
s.data_validazione, s.causale_rifiuto,
s.data_espletamento_donating, s.data_cut_over_aom,
s.stato, s.data_stato_finale);
COMMIT;
MERGE INTO dwh.mnp_dw_rec_hoc_terzeparti t
USING dwh.mnp_dw_rec_hoc_tp_delta s
ON ( t.id_richiesta = s.id_richiesta
AND t.aom_terze_parti = s.aom_terze_parti)
WHEN MATCHED THEN
UPDATE
SET t.data_configurazione_teorica =
s.data_configurazione_teorica,
t.data_configurazione_effettiva =
s.data_configurazione_effettiva
WHEN NOT MATCHED THEN
INSERT (id_richiesta, aom_terze_parti,
data_configurazione_teorica,
data_configurazione_effettiva)
VALUES (s.id_richiesta, s.aom_terze_parti,
s.data_configurazione_teorica,
s.data_configurazione_effettiva);
COMMIT;
ELSE
cod_errore := 1;
END IF;
ELSE
cod_errore := 1;
END IF;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_REC_HOC_DELTA ' || SQLERRM);
RETURN;
END;
/

View File

@@ -0,0 +1,113 @@
CREATE OR REPLACE PROCEDURE UPDATE_REC_HOC_DELTA_2 (
ultimo_giorno_mese IN DATE,
errore IN OUT NUMBER
)
IS
app_id_richiesta dwh.mnp_dw_rec_hoc_delta.id_richiesta%TYPE;
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta
FROM dwh.mnp_dw_rec_hoc_delta;
BEGIN
errore := 0;
OPEN cur_richiesta;
-- Per ogni richiesta aggiorno lo stato e la data di transizione
LOOP
FETCH cur_richiesta
INTO app_id_richiesta;
EXIT WHEN cur_richiesta%NOTFOUND;
UPDATE dwh.mnp_dw_rec_hoc_delta dw
SET (dw.stato, dw.data_stato_finale) =
(SELECT stato_a, data_i_o
FROM (SELECT sr.stato_a, sr.data_i_o
FROM mnp.mnp_storico_richiesta_rec sr
WHERE sr.id_richiesta = app_id_richiesta
AND sr.data_lavorazione <= ultimo_giorno_mese
ORDER BY sr.data_i_o DESC)
WHERE ROWNUM = 1)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_rec_hoc_delta dw
SET data_invio_ad_aom =
(SELECT MIN (TRUNC (xo.data_invio))
FROM mnp.mnp_xml_out xo, mnp.mnp_xml_richiesta_out xro
WHERE xo.tipo_file = '1'
AND xo.da_inviare IN (0, 2)
AND xo.nome_file = xro.nome_file
AND xro.id_richiesta = app_id_richiesta
AND TRUNC (xo.data_invio) <= ultimo_giorno_mese)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_rec_hoc_delta dw
SET data_presa_in_carico =
(SELECT MIN (TRUNC (xi.data_eff))
FROM mnp.mnp_xml_in xi, mnp.mnp_xml_richiesta_in xri
WHERE xi.tipo_file = '5'
AND xi.nome_file = xri.nome_file
AND xri.id_richiesta = app_id_richiesta
AND TRUNC (xi.data_eff) <= ultimo_giorno_mese
AND ( xri.richiestaxml LIKE
'%<STATO_RICHIESTA_NOTIFICA>3%'
OR xri.richiestaxml LIKE
'%<STATO_RICHIESTA_NOTIFICA>7%'
OR xri.richiestaxml LIKE
'%<STATO_RICHIESTA_NOTIFICA>8%'
OR xri.richiestaxml LIKE
'%<STATO_RICHIESTA_NOTIFICA>9%'
))
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_rec_hoc_delta dw
SET data_validazione =
(SELECT MIN (TRUNC (xi.data_eff))
FROM mnp.mnp_xml_in xi, mnp.mnp_xml_richiesta_in xri
WHERE xi.tipo_file = '2'
AND xi.nome_file = xri.nome_file
AND xri.id_richiesta = app_id_richiesta
AND TRUNC (xi.data_eff) <= ultimo_giorno_mese)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_rec_hoc_delta dw
SET causale_rifiuto =
(SELECT causale_accodamento
FROM mnp.mnp_gestione_richiesta_rec gr
WHERE gr.id_richiesta = app_id_richiesta AND gr.stato = 5)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_rec_hoc_delta dw
SET causale_rifiuto =
(SELECT gr.codicerifiutovalidazione
FROM mnp.mnp_gestione_richiesta_rec gr
WHERE gr.id_richiesta = app_id_richiesta AND gr.stato = 7)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_rec_hoc_delta dw
SET data_espletamento_donating =
(SELECT MIN (TRUNC (xi.data_eff))
FROM mnp.mnp_xml_in xi, mnp.mnp_xml_richiesta_in xri
WHERE xi.tipo_file = '6'
AND xi.nome_file = xri.nome_file
AND xri.id_richiesta = app_id_richiesta
AND xi.mittente = dw.aom_donor
AND xri.richiestaxml LIKE '%<STATO_RICHIESTA_NOTIFICA>4%'
AND TRUNC (xi.data_eff) <= ultimo_giorno_mese)
WHERE dw.id_richiesta = app_id_richiesta;
COMMIT;
END LOOP;
CLOSE cur_richiesta;
EXCEPTION
WHEN OTHERS
THEN
errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_REC_HOC_DELTA_2 ' || SQLERRM);
RETURN;
END;
/

View File

@@ -0,0 +1,105 @@
CREATE OR REPLACE PROCEDURE UPDATE_REC_HOC_ONLINE_2 (errore IN OUT NUMBER)
IS
app_id_richiesta dwh.mnp_dw_rec_hoc_online.id_richiesta%TYPE;
app_stato dwh.mnp_dw_rec_hoc_online.stato%TYPE;
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta, stato
FROM dwh.mnp_dw_rec_hoc_online;
BEGIN
errore := 0;
OPEN cur_richiesta;
-- Per ogni richiesta aggiorno lo stato e la data di transizione
LOOP
FETCH cur_richiesta
INTO app_id_richiesta, app_stato;
EXIT WHEN cur_richiesta%NOTFOUND;
-- Aggiornamento della data di transizione di stato
UPDATE dwh.mnp_dw_rec_hoc_online dw
SET (dw.data_stato_finale) =
(SELECT MAX (sr.data_lavorazione)
FROM mnp.mnp_storico_richiesta_rec sr
WHERE sr.id_richiesta = app_id_richiesta
AND sr.stato_a = app_stato)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_rec_hoc_online dw
SET data_invio_ad_aom =
(SELECT MIN (TRUNC (xo.data_invio))
FROM mnp.mnp_xml_out xo, mnp.mnp_xml_richiesta_out xro
WHERE xo.tipo_file = '1'
AND xo.da_inviare IN (0, 2)
AND xo.nome_file = xro.nome_file
AND xro.id_richiesta = app_id_richiesta)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_rec_hoc_online dw
SET data_presa_in_carico =
(SELECT MIN (TRUNC (xi.data_eff))
FROM mnp.mnp_xml_in xi, mnp.mnp_xml_richiesta_in xri
WHERE xi.tipo_file = '5'
AND xi.nome_file = xri.nome_file
AND xri.id_richiesta = app_id_richiesta
AND ( xri.richiestaxml LIKE
'%<STATO_RICHIESTA_NOTIFICA>3%'
OR xri.richiestaxml LIKE
'%<STATO_RICHIESTA_NOTIFICA>7%'
OR xri.richiestaxml LIKE
'%<STATO_RICHIESTA_NOTIFICA>8%'
OR xri.richiestaxml LIKE
'%<STATO_RICHIESTA_NOTIFICA>9%'
))
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_rec_hoc_online dw
SET data_validazione =
(SELECT MIN (TRUNC (xi.data_eff))
FROM mnp.mnp_xml_in xi, mnp.mnp_xml_richiesta_in xri
WHERE xi.tipo_file = '2'
AND xi.nome_file = xri.nome_file
AND xri.id_richiesta = app_id_richiesta)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_rec_hoc_online dw
SET causale_rifiuto =
(SELECT causale_accodamento
FROM mnp.mnp_gestione_richiesta_rec gr
WHERE gr.id_richiesta = app_id_richiesta AND gr.stato = 5)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_rec_hoc_online dw
SET causale_rifiuto =
(SELECT gr.codicerifiutovalidazione
FROM mnp.mnp_gestione_richiesta_rec gr
WHERE gr.id_richiesta = app_id_richiesta AND gr.stato = 7)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_rec_hoc_online dw
SET data_espletamento_donating =
(SELECT MIN (TRUNC (xi.data_eff))
FROM mnp.mnp_xml_in xi, mnp.mnp_xml_richiesta_in xri
WHERE xi.tipo_file = '6'
AND xi.nome_file = xri.nome_file
AND xri.id_richiesta = app_id_richiesta
AND xi.mittente = dw.aom_donor
AND xri.richiestaxml LIKE '%<STATO_RICHIESTA_NOTIFICA>4%')
WHERE dw.id_richiesta = app_id_richiesta;
COMMIT;
END LOOP;
CLOSE cur_richiesta;
EXCEPTION
WHEN OTHERS
THEN
errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_REC_HOC_online_2 ' || SQLERRM);
RETURN;
END;
/

View File

@@ -0,0 +1,62 @@
CREATE OR REPLACE PROCEDURE UPDATE_REC_HOC_ONLINE_ID (cod_errore IN OUT NUMBER)
IS
errore NUMBER (1) := 0;
-- Purpose: Aggiornamento al mese di riferimento della tabella mnp_dw_donor_delta
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- L.Marcucci 16/08/2004 -------------------------------------------
BEGIN
cod_errore := 0;
DELETE FROM dwh.mnp_dw_rec_hoc_tp_online;
DELETE FROM dwh.mnp_dw_rec_hoc_online;
COMMIT;
INSERT INTO dwh.mnp_dw_rec_hoc_online
(id_richiesta, aom_donor, msisdn, tipo_linea,
data_ricezione_richiesta, data_validazione_max,
data_cut_over_aom, stato)
SELECT gr.id_richiesta, gr.codice_operatore_donating, gr.msisdn,
gr.tipo_cliente, gr.dataricezionerichiesta,
TRUNC (gr.data_validazione_max), TRUNC (gr.data_cut_over_aom),
stato
FROM mnp.mnp_gestione_richiesta_rec gr,
dwh.mnp_dw_rec_in_richiesta dim
WHERE gr.id_richiesta = dim.id_richiesta
AND gr.richiestaadhoc = '1'
AND gr.codice_operatore_donating <> 'TIMT'
AND gr.dataricezionerichiesta > =
TO_DATE ('26-APR-2004', 'dd-MON-YYYY');
COMMIT;
INSERT INTO dwh.mnp_dw_rec_hoc_tp_online
(id_richiesta, aom_terze_parti)
SELECT dwt.id_richiesta, o.desc_olo
FROM dwh.mnp_dw_rec_hoc_online dwt, mnp.mnp_olo o
WHERE o.flag_terze_parti = 1 AND o.desc_olo <> dwt.aom_donor;
COMMIT;
dwh.update_rec_hoc_online_2 (errore);
IF errore = 0
THEN
dwh.update_rec_hoc_tp_online (errore);
ELSE
cod_errore := 1;
END IF;
IF errore = 0
THEN
dwh.calcola_sla_rec_hoc_online (errore);
END IF;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_REC_HOC_ONLINE ' || SQLERRM);
RETURN;
END;
/

View File

@@ -0,0 +1,62 @@
CREATE OR REPLACE PROCEDURE UPDATE_REC_HOC_ONLINE_MSISDN (cod_errore IN OUT NUMBER)
IS
errore NUMBER (1) := 0;
-- Purpose: Aggiornamento al mese di riferimento della tabella mnp_dw_donor_delta
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- L.Marcucci 16/08/2004 -------------------------------------------
BEGIN
cod_errore := 0;
DELETE FROM dwh.mnp_dw_rec_hoc_tp_online;
DELETE FROM dwh.mnp_dw_rec_hoc_online;
COMMIT;
INSERT INTO dwh.mnp_dw_rec_hoc_online
(id_richiesta, aom_donor, msisdn, tipo_linea,
data_ricezione_richiesta, data_validazione_max,
data_cut_over_aom)
SELECT gr.id_richiesta, gr.codice_operatore_donating, gr.msisdn,
gr.tipo_cliente, gr.dataricezionerichiesta,
TRUNC (gr.data_validazione_max), TRUNC (gr.data_cut_over_aom)
FROM mnp.mnp_gestione_richiesta_rec gr, dwh.mnp_dw_rec_in_msisdn dim
WHERE gr.msisdn = dim.msisdn
AND gr.richiestaadhoc = '1'
AND gr.codice_operatore_donating <> 'TIMT'
AND gr.dataricezionerichiesta > =
TO_DATE ('26-APR-2004', 'dd-MON-YYYY');
COMMIT;
INSERT INTO dwh.mnp_dw_rec_hoc_tp_online
(id_richiesta, aom_terze_parti)
SELECT dwt.id_richiesta, o.desc_olo
FROM dwh.mnp_dw_rec_hoc_online dwt, mnp.mnp_olo o
WHERE o.flag_terze_parti = 1 AND o.desc_olo <> dwt.aom_donor;
COMMIT;
dwh.update_rec_hoc_online_2 (errore);
IF errore = 0
THEN
dwh.update_rec_hoc_tp_online (errore);
ELSE
cod_errore := 1;
END IF;
IF errore = 0
THEN
dwh.calcola_sla_rec_hoc_online (errore);
END IF;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in update_rec_hoc_online_msisdn'
|| SQLERRM
);
RETURN;
END;
/

View File

@@ -0,0 +1,62 @@
CREATE OR REPLACE PROCEDURE UPDATE_REC_HOC_TERZE_PARTI (
ultimo_giorno_mese IN DATE,
errore IN OUT NUMBER
)
IS
app_id_richiesta dwh.mnp_dw_rec_hoc_tp_delta.id_richiesta%TYPE;
app_terza_parte dwh.mnp_dw_rec_hoc_tp_delta.aom_terze_parti%TYPE;
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta, aom_terze_parti
FROM dwh.mnp_dw_rec_hoc_tp_delta;
BEGIN
errore := 0;
OPEN cur_richiesta;
-- Per ogni richiesta aggiorno lo stato e la data di transizione
LOOP
FETCH cur_richiesta
INTO app_id_richiesta, app_terza_parte;
EXIT WHEN cur_richiesta%NOTFOUND;
UPDATE dwh.mnp_dw_rec_hoc_tp_delta dw
SET data_configurazione_teorica =
(SELECT MIN (xo.data_invio)
FROM mnp.mnp_xml_out xo, mnp.mnp_xml_richiesta_out xro
WHERE xo.tipo_file = '3'
AND xo.da_inviare IN (0, 2)
AND xo.nome_file = xro.nome_file
AND xro.id_richiesta = app_id_richiesta
AND xo.destinatario = app_terza_parte
AND trunc(xo.data_invio) <= ultimo_giorno_mese)
WHERE dw.id_richiesta = app_id_richiesta
AND dw.aom_terze_parti = app_terza_parte;
UPDATE dwh.mnp_dw_rec_hoc_tp_delta dw
SET data_configurazione_effettiva =
(SELECT MIN (xi.data_eff)
FROM mnp.mnp_xml_in xi, mnp.mnp_xml_richiesta_in xri
WHERE xi.tipo_file = '6'
AND xi.nome_file = xri.nome_file
AND xri.id_richiesta = app_id_richiesta
AND xi.mittente = app_terza_parte
AND xri.richiestaxml LIKE '%<STATO_RICHIESTA_NOTIFICA>4%'
AND trunc(xi.data_eff) <= ultimo_giorno_mese)
WHERE dw.id_richiesta = app_id_richiesta
AND dw.aom_terze_parti = app_terza_parte;
END LOOP;
CLOSE cur_richiesta;
EXCEPTION
WHEN OTHERS
THEN
errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_REC_HOC_TERZE_PARTI ' || SQLERRM
);
RETURN;
END;
/

View File

@@ -0,0 +1,59 @@
CREATE OR REPLACE PROCEDURE UPDATE_REC_HOC_TP_ONLINE (
errore IN OUT NUMBER
)
IS
app_id_richiesta dwh.mnp_dw_rec_hoc_tp_online.id_richiesta%TYPE;
app_terza_parte dwh.mnp_dw_rec_hoc_tp_online.aom_terze_parti%TYPE;
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta, aom_terze_parti
FROM dwh.mnp_dw_rec_hoc_tp_online;
BEGIN
errore := 0;
OPEN cur_richiesta;
-- Per ogni richiesta aggiorno lo stato e la data di transizione
LOOP
FETCH cur_richiesta
INTO app_id_richiesta, app_terza_parte;
EXIT WHEN cur_richiesta%NOTFOUND;
UPDATE dwh.mnp_dw_rec_hoc_tp_online dw
SET data_configurazione_teorica =
(SELECT MIN (xo.data_invio)
FROM mnp.mnp_xml_out xo, mnp.mnp_xml_richiesta_out xro
WHERE xo.tipo_file = '3'
AND xo.da_inviare IN (0, 2)
AND xo.nome_file = xro.nome_file
AND xro.id_richiesta = app_id_richiesta
AND xo.destinatario = app_terza_parte)
WHERE dw.id_richiesta = app_id_richiesta
AND dw.aom_terze_parti = app_terza_parte;
UPDATE dwh.mnp_dw_rec_hoc_tp_online dw
SET data_configurazione_effettiva =
(SELECT MIN (xi.data_eff)
FROM mnp.mnp_xml_in xi, mnp.mnp_xml_richiesta_in xri
WHERE xi.tipo_file = '6'
AND xi.nome_file = xri.nome_file
AND xri.id_richiesta = app_id_richiesta
AND xi.mittente = app_terza_parte
AND xri.richiestaxml LIKE '%<STATO_RICHIESTA_NOTIFICA>4%')
WHERE dw.id_richiesta = app_id_richiesta
AND dw.aom_terze_parti = app_terza_parte;
END LOOP;
CLOSE cur_richiesta;
EXCEPTION
WHEN OTHERS
THEN
errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_REC_HOC_TP_ONLINE ' || SQLERRM
);
RETURN;
END;
/

View File

@@ -0,0 +1,104 @@
CREATE OR REPLACE PROCEDURE UPDATE_REC_ONLINE_2 (errore IN OUT NUMBER)
IS
app_id_richiesta dwh.mnp_dw_rec_online.id_richiesta%TYPE;
app_stato dwh.mnp_dw_rec_online.stato%TYPE;
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta, stato
FROM dwh.mnp_dw_rec_online;
BEGIN
errore := 0;
OPEN cur_richiesta;
-- Per ogni richiesta aggiorno lo stato e la data di transizione
LOOP
FETCH cur_richiesta
INTO app_id_richiesta, app_stato;
EXIT WHEN cur_richiesta%NOTFOUND;
UPDATE dwh.mnp_dw_rec_online dw
SET (dw.data_stato_finale) =
(SELECT MAX (sr.data_lavorazione)
FROM mnp.mnp_storico_richiesta_rec sr
WHERE sr.id_richiesta = app_id_richiesta
AND sr.stato_a = app_stato)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_rec_online dw
SET data_invio_ad_aom =
(SELECT MIN (TRUNC (xo.data_invio))
FROM mnp.mnp_xml_out xo, mnp.mnp_xml_richiesta_out xro
WHERE xo.tipo_file = '1'
AND xo.da_inviare IN (0, 2)
AND xo.nome_file = xro.nome_file
AND xro.id_richiesta = app_id_richiesta)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_rec_online dw
SET data_presa_in_carico =
(SELECT MIN (TRUNC (xi.data_eff))
FROM mnp.mnp_xml_in xi, mnp.mnp_xml_richiesta_in xri
WHERE xi.tipo_file = '5'
AND xi.nome_file = xri.nome_file
AND xri.id_richiesta = app_id_richiesta
AND ( xri.richiestaxml LIKE
'%<STATO_RICHIESTA_NOTIFICA>3%'
OR xri.richiestaxml LIKE
'%<STATO_RICHIESTA_NOTIFICA>7%'
OR xri.richiestaxml LIKE
'%<STATO_RICHIESTA_NOTIFICA>8%'
OR xri.richiestaxml LIKE
'%<STATO_RICHIESTA_NOTIFICA>9%'
))
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_rec_online dw
SET data_validazione =
(SELECT MIN (TRUNC (xi.data_eff))
FROM mnp.mnp_xml_in xi, mnp.mnp_xml_richiesta_in xri
WHERE xi.tipo_file = '2'
AND xi.nome_file = xri.nome_file
AND xri.id_richiesta = app_id_richiesta)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_rec_online dw
SET causale_rifiuto =
(SELECT causale_accodamento
FROM mnp.mnp_gestione_richiesta_rec gr
WHERE gr.id_richiesta = app_id_richiesta AND gr.stato = 5)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_rec_online dw
SET causale_rifiuto =
(SELECT gr.codicerifiutovalidazione
FROM mnp.mnp_gestione_richiesta_rec gr
WHERE gr.id_richiesta = app_id_richiesta AND gr.stato = 7)
WHERE dw.id_richiesta = app_id_richiesta;
UPDATE dwh.mnp_dw_rec_online dw
SET data_espletamento_donating =
(SELECT MIN (TRUNC (xi.data_eff))
FROM mnp.mnp_xml_in xi, mnp.mnp_xml_richiesta_in xri
WHERE xi.tipo_file = '6'
AND xi.nome_file = xri.nome_file
AND xri.id_richiesta = app_id_richiesta
AND xi.mittente = dw.aom_donor
AND xri.richiestaxml LIKE '%<STATO_RICHIESTA_NOTIFICA>4%')
WHERE dw.id_richiesta = app_id_richiesta;
COMMIT;
END LOOP;
CLOSE cur_richiesta;
EXCEPTION
WHEN OTHERS
THEN
errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_REC_DONLINE_2 ' || SQLERRM);
RETURN;
END;
/

View File

@@ -0,0 +1,61 @@
CREATE OR REPLACE PROCEDURE UPDATE_REC_ONLINE_ID (cod_errore IN OUT NUMBER)
IS
errore NUMBER (1) := 0;
-- Purpose: Aggiornamento al mese di riferimento della tabella mnp_dw_donor_delta
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- L.Marcucci 16/08/2004 -------------------------------------------
BEGIN
cod_errore := 0;
DELETE FROM dwh.mnp_dw_rec_tp_online;
DELETE FROM dwh.mnp_dw_rec_online;
COMMIT;
INSERT INTO dwh.mnp_dw_rec_online
(id_richiesta, aom_donor, msisdn, tipo_linea,
data_ricezione_richiesta, data_validazione_max,
data_cut_over_aom, stato)
SELECT gr.id_richiesta, gr.codice_operatore_donating, gr.msisdn,
gr.tipo_cliente, gr.dataricezionerichiesta,
TRUNC (gr.data_validazione_max), TRUNC (gr.data_cut_over_aom),
stato
FROM mnp.mnp_gestione_richiesta_rec gr
WHERE gr.id_richiesta in (select dim.id_richiesta from dwh.mnp_dw_rec_in_richiesta dim)
AND gr.richiestaadhoc = '0'
AND gr.codice_operatore_donating <> 'TIMT'
AND gr.dataricezionerichiesta >=
TO_DATE ('26-APR-2004', 'dd-MON-YYYY');
COMMIT;
INSERT INTO dwh.mnp_dw_rec_tp_online
(id_richiesta, aom_terze_parti)
SELECT dwt.id_richiesta, o.desc_olo
FROM dwh.mnp_dw_rec_online dwt, mnp.mnp_olo o
WHERE o.flag_terze_parti = 1 AND o.desc_olo <> dwt.aom_donor;
COMMIT;
dwh.update_rec_online_2 (errore);
IF errore = 0
THEN
dwh.update_rec_tp_online (errore);
ELSE
cod_errore := 1;
END IF;
IF errore = 0
THEN
dwh.calcola_sla_recipient_online (errore);
END IF;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_REC_ONLINE ' || SQLERRM);
RETURN;
END;
/

View File

@@ -0,0 +1,61 @@
CREATE OR REPLACE PROCEDURE UPDATE_REC_ONLINE_MSISDN (cod_errore IN OUT NUMBER)
IS
errore NUMBER (1) := 0;
-- Purpose: Aggiornamento al mese di riferimento della tabella mnp_dw_donor_delta
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- L.Marcucci 16/08/2004 -------------------------------------------
BEGIN
cod_errore := 0;
DELETE FROM dwh.mnp_dw_rec_tp_online;
DELETE FROM dwh.mnp_dw_rec_online;
COMMIT;
INSERT INTO dwh.mnp_dw_rec_online
(id_richiesta, aom_donor, msisdn, tipo_linea,
data_ricezione_richiesta, data_validazione_max,
data_cut_over_aom, stato)
SELECT gr.id_richiesta, gr.codice_operatore_donating, gr.msisdn,
gr.tipo_cliente, gr.dataricezionerichiesta,
TRUNC (gr.data_validazione_max), TRUNC (gr.data_cut_over_aom),
stato
FROM mnp.mnp_gestione_richiesta_rec gr
WHERE gr.msisdn in (select dim.msisdn from dwh.mnp_dw_rec_in_msisdn dim)
AND gr.richiestaadhoc = '0'
AND gr.codice_operatore_donating <> 'TIMT'
AND gr.dataricezionerichiesta >=
TO_DATE ('26-APR-2004', 'dd-MON-YYYY');
COMMIT;
INSERT INTO dwh.mnp_dw_rec_tp_online
(id_richiesta, aom_terze_parti)
SELECT dwt.id_richiesta, o.desc_olo
FROM dwh.mnp_dw_rec_online dwt, mnp.mnp_olo o
WHERE o.flag_terze_parti = 1 AND o.desc_olo <> dwt.aom_donor;
COMMIT;
dwh.update_rec_online_2 (errore);
IF errore = 0
THEN
dwh.update_rec_tp_online (errore);
ELSE
cod_errore := 1;
END IF;
IF errore = 0
THEN
dwh.calcola_sla_recipient_online (errore);
END IF;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_REC_ONLINE_MSISDN ' || SQLERRM);
RETURN;
END;
/

View File

@@ -0,0 +1,114 @@
CREATE OR REPLACE PROCEDURE UPDATE_REC_TACS_DELTA (
mese_in IN NUMBER,
anno_in IN NUMBER,
cod_errore IN OUT NUMBER
)
IS
primo_giorno_mese DATE;
-- Primo giorno lavorativo del mese di riferiemnto
ultimo_giorno_mese DATE;
-- Ultimo giorno lavorativo del mese di riferiemnto
errore NUMBER (1) := 0;
-- Purpose: Aggiornamento al mese di riferimento della tabella mnp_dw_donor_delta
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- L.Marcucci 16/08/2004 -------------------------------------------
BEGIN
cod_errore := 0;
primo_giorno_mese := dwh.fun_primo_giorno_lavorativo (mese_in, anno_in);
ultimo_giorno_mese := dwh.fun_ultimo_giorno_lavorativo (mese_in, anno_in);
DELETE FROM dwh.mnp_dw_rec_tacs_delta;
COMMIT;
INSERT INTO dwh.mnp_dw_rec_tacs_delta
(id_richiesta, aom_donor, msisdn, tipo_linea,
data_ricezione_richiesta, data_validazione_max,
data_cut_over_calc)
SELECT gr.id_richiesta, gr.codice_operatore_donating, gr.msisdn,
gr.tipo_cliente, gr.dataricezionerichiesta,
gr.data_validazione_max, TRUNC (gr.data_cut_over_calc)
FROM mnp.mnp_gestione_richiesta_rec gr
WHERE gr.richiestaadhoc = '0'
AND gr.codice_operatore_donating = 'TIMT'
AND gr.dataricezionerichiesta >= to_date('26-APR-2004','dd-MON-YYYY')
AND gr.dataricezionerichiesta <= ultimo_giorno_mese
AND ( gr.data_fine_processo IS NULL
OR (gr.data_fine_processo >= primo_giorno_mese)
);
COMMIT;
DELETE FROM dwh.mnp_dw_rec_tacs_tp_delta;
COMMIT;
INSERT INTO dwh.mnp_dw_rec_tacs_tp_delta
(id_richiesta, aom_terze_parti)
SELECT dwt.id_richiesta, o.desc_olo
FROM dwh.mnp_dw_rec_tacs_delta dwt, mnp.mnp_olo o
WHERE o.flag_terze_parti = 1;
COMMIT;
dwh.update_rec_tacs_delta_2 (ultimo_giorno_mese, errore);
IF errore = 0
THEN
dwh.update_rec_tacs_terze_parti (ultimo_giorno_mese, errore);
IF errore = 0
THEN
MERGE INTO dwh.mnp_dw_rec_tacs t
USING dwh.mnp_dw_rec_tacs_delta s
ON (t.id_richiesta = s.id_richiesta)
WHEN MATCHED THEN
UPDATE
SET t.aom_donor = s.aom_donor, t.msisdn = s.msisdn,
t.tipo_linea = s.tipo_linea,
t.data_ricezione_richiesta = s.data_ricezione_richiesta,
t.data_validazione_max = s.data_validazione_max,
t.data_cut_over_calc = s.data_cut_over_calc,
t.stato = s.stato,
t.data_stato_finale = s.data_stato_finale
WHEN NOT MATCHED THEN
INSERT (id_richiesta, aom_donor, msisdn, tipo_linea,
data_ricezione_richiesta, data_validazione_max,
data_cut_over_calc, stato, data_stato_finale)
VALUES (s.id_richiesta, s.aom_donor, s.msisdn, s.tipo_linea,
s.data_ricezione_richiesta, s.data_validazione_max,
s.data_cut_over_calc, s.stato, s.data_stato_finale);
COMMIT;
MERGE INTO dwh.mnp_dw_rec_tacs_terzeparti t
USING dwh.mnp_dw_rec_tacs_tp_delta s
ON ( t.id_richiesta = s.id_richiesta
AND t.aom_terze_parti = s.aom_terze_parti)
WHEN MATCHED THEN
UPDATE
SET t.data_configurazione_teorica =
s.data_configurazione_teorica,
t.data_configurazione_effettiva =
s.data_configurazione_effettiva
WHEN NOT MATCHED THEN
INSERT (id_richiesta, aom_terze_parti,
data_configurazione_teorica,
data_configurazione_effettiva)
VALUES (s.id_richiesta, s.aom_terze_parti,
s.data_configurazione_teorica,
s.data_configurazione_effettiva);
COMMIT;
ELSE
cod_errore := 1;
END IF;
ELSE
cod_errore := 1;
END IF;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_REC_TACS_DELTA ' || SQLERRM);
RETURN;
END;
/

View File

@@ -0,0 +1,47 @@
CREATE OR REPLACE PROCEDURE UPDATE_REC_TACS_DELTA_2 (
ultimo_giorno_mese IN DATE,
errore IN OUT NUMBER
)
IS
app_id_richiesta dwh.mnp_dw_rec_tacs_delta.id_richiesta%TYPE;
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta
FROM dwh.mnp_dw_rec_tacs_delta;
BEGIN
errore := 0;
OPEN cur_richiesta;
-- Per ogni richiesta aggiorno lo stato e la data di transizione
LOOP
FETCH cur_richiesta
INTO app_id_richiesta;
EXIT WHEN cur_richiesta%NOTFOUND;
UPDATE dwh.mnp_dw_rec_tacs_delta dw
SET (dw.stato, dw.data_stato_finale) =
(SELECT stato_a, data_i_o
FROM (SELECT sr.stato_a, sr.data_i_o
FROM mnp.mnp_storico_richiesta_rec sr
WHERE sr.id_richiesta = app_id_richiesta
AND sr.data_lavorazione <= ultimo_giorno_mese
ORDER BY sr.data_i_o DESC)
WHERE ROWNUM = 1)
WHERE dw.id_richiesta = app_id_richiesta;
COMMIT;
END LOOP;
CLOSE cur_richiesta;
EXCEPTION
WHEN OTHERS
THEN
errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_REC_TACS_DELTA_2 ' || SQLERRM);
RETURN;
END;
/

View File

@@ -0,0 +1,42 @@
CREATE OR REPLACE PROCEDURE UPDATE_REC_TACS_ONLINE_2 (errore IN OUT NUMBER)
IS
app_id_richiesta dwh.mnp_dw_rec_tacs_online.id_richiesta%TYPE;
app_stato dwh.mnp_dw_rec_tacs_online.stato%TYPE;
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta,stato
FROM dwh.mnp_dw_rec_tacs_online;
BEGIN
errore := 0;
OPEN cur_richiesta;
-- Per ogni richiesta aggiorno lo stato e la data di transizione
LOOP
FETCH cur_richiesta
INTO app_id_richiesta, app_stato;
EXIT WHEN cur_richiesta%NOTFOUND;
UPDATE dwh.mnp_dw_rec_tacs_online dw
SET (dw.data_stato_finale) =
(SELECT MAX (sr.data_lavorazione)
FROM mnp.mnp_storico_richiesta_rec sr
WHERE sr.id_richiesta = app_id_richiesta
AND sr.stato_a = app_stato)
WHERE dw.id_richiesta = app_id_richiesta;
COMMIT;
END LOOP;
CLOSE cur_richiesta;
EXCEPTION
WHEN OTHERS
THEN
errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_REC_TACS_ONLINE_2 ' || SQLERRM);
RETURN;
END;
/

View File

@@ -0,0 +1,59 @@
CREATE OR REPLACE PROCEDURE UPDATE_REC_TACS_ONLINE_ID (cod_errore IN OUT NUMBER)
IS
errore NUMBER (1) := 0;
-- Purpose: Aggiornamento al mese di riferimento della tabella mnp_rec_tacs_online
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- L.Marcucci 12/10/2004 -------------------------------------------
BEGIN
cod_errore := 0;
DELETE FROM dwh.mnp_dw_rec_tacs_tp_online;
DELETE FROM dwh.mnp_dw_rec_tacs_online;
COMMIT;
INSERT INTO dwh.mnp_dw_rec_tacs_online
(id_richiesta, aom_donor, msisdn, tipo_linea,
data_ricezione_richiesta, data_validazione_max,
data_cut_over_calc, stato)
SELECT gr.id_richiesta, gr.codice_operatore_donating, gr.msisdn,
gr.tipo_cliente, gr.dataricezionerichiesta,
gr.data_validazione_max, TRUNC (gr.data_cut_over_calc), stato
FROM mnp.mnp_gestione_richiesta_rec gr,
dwh.mnp_dw_rec_in_richiesta dim
WHERE gr.id_richiesta = dim.id_richiesta
AND gr.richiestaadhoc = '0'
AND gr.codice_operatore_donating = 'TIMT'
AND gr.dataricezionerichiesta >=
TO_DATE ('26-APR-2004', 'dd-MON-YYYY');
COMMIT;
INSERT INTO dwh.mnp_dw_rec_tacs_tp_online
(id_richiesta, aom_terze_parti)
SELECT dwt.id_richiesta, o.desc_olo
FROM dwh.mnp_dw_rec_tacs_online dwt, mnp.mnp_olo o
WHERE o.flag_terze_parti = 1;
COMMIT;
dwh.update_rec_tacs_online_2 (errore);
IF errore = 0
THEN
dwh.update_rec_tacs_tp_online (errore);
END IF;
IF errore = 0
THEN
dwh.calcola_sla_rec_tacs_online (errore);
END IF;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_REC_TACS_online_id ' || SQLERRM);
RETURN;
END;
/

View File

@@ -0,0 +1,59 @@
CREATE OR REPLACE PROCEDURE UPDATE_REC_TACS_ONLINE_MSISDN (cod_errore IN OUT NUMBER)
IS
errore NUMBER (1) := 0;
-- Purpose: Aggiornamento al mese di riferimento della tabella mnp_rec_tacs_online
--
-- MODIFICATION HISTORY
-- Person Date Comments
-- L.Marcucci 12/10/2004 -------------------------------------------
BEGIN
cod_errore := 0;
DELETE FROM dwh.mnp_dw_rec_tacs_tp_online;
DELETE FROM dwh.mnp_dw_rec_tacs_online;
COMMIT;
INSERT INTO dwh.mnp_dw_rec_tacs_online
(id_richiesta, aom_donor, msisdn, tipo_linea,
data_ricezione_richiesta, data_validazione_max,
data_cut_over_calc, stato)
SELECT gr.id_richiesta, gr.codice_operatore_donating, gr.msisdn,
gr.tipo_cliente, gr.dataricezionerichiesta,
gr.data_validazione_max, TRUNC (gr.data_cut_over_calc), stato
FROM mnp.mnp_gestione_richiesta_rec gr, dwh.mnp_dw_rec_in_msisdn dim
WHERE gr.msisdn = dim.msisdn
AND gr.richiestaadhoc = '0'
AND gr.codice_operatore_donating = 'TIMT'
AND gr.dataricezionerichiesta >=
TO_DATE ('26-APR-2004', 'dd-MON-YYYY');
COMMIT;
INSERT INTO dwh.mnp_dw_rec_tacs_tp_online
(id_richiesta, aom_terze_parti)
SELECT dwt.id_richiesta, o.desc_olo
FROM dwh.mnp_dw_rec_tacs_online dwt, mnp.mnp_olo o
WHERE o.flag_terze_parti = 1;
COMMIT;
dwh.update_rec_tacs_online_2 (errore);
IF errore = 0
THEN
dwh.update_rec_tacs_tp_online (errore);
END IF;
IF errore = 0
THEN
dwh.calcola_sla_rec_tacs_online (errore);
END IF;
EXCEPTION
WHEN OTHERS
THEN
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_REC_TACS_online_id ' || SQLERRM);
RETURN;
END;
/

View File

@@ -0,0 +1,63 @@
CREATE OR REPLACE PROCEDURE UPDATE_REC_TACS_TERZE_PARTI (
ultimo_giorno_mese IN DATE,
errore IN OUT NUMBER
)
IS
app_id_richiesta dwh.mnp_dw_rec_hoc_tp_delta.id_richiesta%TYPE;
app_terza_parte dwh.mnp_dw_rec_hoc_tp_delta.aom_terze_parti%TYPE;
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta, aom_terze_parti
FROM dwh.mnp_dw_rec_tacs_tp_delta;
BEGIN
errore := 0;
OPEN cur_richiesta;
-- Per ogni richiesta aggiorno lo stato e la data di transizione
LOOP
FETCH cur_richiesta
INTO app_id_richiesta, app_terza_parte;
EXIT WHEN cur_richiesta%NOTFOUND;
UPDATE dwh.mnp_dw_rec_tacs_tp_delta dw
SET data_configurazione_teorica =
(SELECT MIN (xo.data_invio)
FROM mnp.mnp_xml_out xo, mnp.mnp_xml_richiesta_out xro
WHERE xo.tipo_file = '3'
AND xo.da_inviare IN (0, 2)
AND xo.nome_file = xro.nome_file
AND xro.id_richiesta = app_id_richiesta
AND xo.destinatario = app_terza_parte
AND TRUNC (xo.data_invio) <= ultimo_giorno_mese)
WHERE dw.id_richiesta = app_id_richiesta
AND dw.aom_terze_parti = app_terza_parte;
UPDATE dwh.mnp_dw_rec_tacs_tp_delta dw
SET data_configurazione_effettiva =
(SELECT MIN (xi.data_eff)
FROM mnp.mnp_xml_in xi, mnp.mnp_xml_richiesta_in xri
WHERE xi.tipo_file = '6'
AND xi.nome_file = xri.nome_file
AND xri.id_richiesta = app_id_richiesta
AND xi.mittente = app_terza_parte
AND xri.richiestaxml LIKE '%<STATO_RICHIESTA_NOTIFICA>4%'
AND TRUNC (xi.data_eff) <= ultimo_giorno_mese)
WHERE dw.id_richiesta = app_id_richiesta
AND dw.aom_terze_parti = app_terza_parte;
END LOOP;
CLOSE cur_richiesta;
EXCEPTION
WHEN OTHERS
THEN
errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_REC_TACS_TERZE_PARTI '
|| SQLERRM
);
RETURN;
END;
/

View File

@@ -0,0 +1,62 @@
CREATE OR REPLACE PROCEDURE UPDATE_REC_TACS_TP_ONLINE (
errore IN OUT NUMBER
)
IS
app_id_richiesta dwh.MNP_DW_REC_TACS_TP_ONLINE.id_richiesta%TYPE;
app_terza_parte dwh.MNP_DW_REC_TACS_TP_ONLINE.aom_terze_parti%TYPE;
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta, aom_terze_parti
FROM dwh.mnp_dw_rec_tacs_tp_online;
BEGIN
errore := 0;
OPEN cur_richiesta;
-- Per ogni richiesta aggiorno lo stato e la data di transizione
LOOP
FETCH cur_richiesta
INTO app_id_richiesta, app_terza_parte;
EXIT WHEN cur_richiesta%NOTFOUND;
UPDATE dwh.mnp_dw_rec_tacs_tp_online dw
SET data_configurazione_teorica =
(SELECT MIN (xo.data_invio)
FROM mnp.mnp_xml_out xo, mnp.mnp_xml_richiesta_out xro
WHERE xo.tipo_file = '3'
AND xo.da_inviare IN (0, 2)
AND xo.nome_file = xro.nome_file
AND xro.id_richiesta = app_id_richiesta
AND xo.destinatario = app_terza_parte
)
WHERE dw.id_richiesta = app_id_richiesta
AND dw.aom_terze_parti = app_terza_parte;
UPDATE dwh.mnp_dw_rec_tacs_tp_online dw
SET data_configurazione_effettiva =
(SELECT MIN (xi.data_eff)
FROM mnp.mnp_xml_in xi, mnp.mnp_xml_richiesta_in xri
WHERE xi.tipo_file = '6'
AND xi.nome_file = xri.nome_file
AND xri.id_richiesta = app_id_richiesta
AND xi.mittente = app_terza_parte
AND xri.richiestaxml LIKE '%<STATO_RICHIESTA_NOTIFICA>4%')
WHERE dw.id_richiesta = app_id_richiesta
AND dw.aom_terze_parti = app_terza_parte;
END LOOP;
CLOSE cur_richiesta;
EXCEPTION
WHEN OTHERS
THEN
errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_REC_TACS_TP_ONLINE '
|| SQLERRM
);
RETURN;
END;
/

View File

@@ -0,0 +1,61 @@
CREATE OR REPLACE PROCEDURE UPDATE_REC_TERZE_PARTI (
ultimo_giorno_mese IN DATE,
errore IN OUT NUMBER
)
IS
app_id_richiesta dwh.mnp_dw_rec_terzeparti_delta.id_richiesta%TYPE;
app_terza_parte dwh.mnp_dw_rec_terzeparti_delta.aom_terze_parti%TYPE;
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta, aom_terze_parti
FROM dwh.mnp_dw_rec_terzeparti_delta;
BEGIN
errore := 0;
OPEN cur_richiesta;
-- Per ogni richiesta aggiorno lo stato e la data di transizione
LOOP
FETCH cur_richiesta
INTO app_id_richiesta, app_terza_parte;
EXIT WHEN cur_richiesta%NOTFOUND;
UPDATE dwh.mnp_dw_rec_terzeparti_delta dw
SET data_configurazione_teorica =
(SELECT MIN (TRUNC (xo.data_invio))
FROM mnp.mnp_xml_out xo, mnp.mnp_xml_richiesta_out xro
WHERE xo.tipo_file = '3'
AND xo.da_inviare IN (0, 2)
AND xo.nome_file = xro.nome_file
AND xro.id_richiesta = app_id_richiesta
AND xo.destinatario = app_terza_parte
AND TRUNC (xo.data_invio) <= ultimo_giorno_mese)
WHERE dw.id_richiesta = app_id_richiesta
AND dw.aom_terze_parti = app_terza_parte;
UPDATE dwh.mnp_dw_rec_terzeparti_delta dw
SET data_configurazione_effettiva =
(SELECT MIN (TRUNC (xi.data_eff))
FROM mnp.mnp_xml_in xi, mnp.mnp_xml_richiesta_in xri
WHERE xi.tipo_file = '6'
AND xi.nome_file = xri.nome_file
AND xri.id_richiesta = app_id_richiesta
AND xi.mittente = app_terza_parte
AND xri.richiestaxml LIKE '%<STATO_RICHIESTA_NOTIFICA>4%'
AND TRUNC (xi.data_eff) <= ultimo_giorno_mese)
WHERE dw.id_richiesta = app_id_richiesta
AND dw.aom_terze_parti = app_terza_parte;
END LOOP;
CLOSE cur_richiesta;
EXCEPTION
WHEN OTHERS
THEN
errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_REC_TERZE_PARTI ' || SQLERRM);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,56 @@
CREATE OR REPLACE PROCEDURE UPDATE_REC_TP_ONLINE (errore IN OUT NUMBER)
IS
app_id_richiesta dwh.mnp_dw_rec_tp_online.id_richiesta%TYPE;
app_terza_parte dwh.mnp_dw_rec_tp_online.aom_terze_parti%TYPE;
-- Cursore per le richieste di cui calcolare gli SLA
CURSOR cur_richiesta
IS
SELECT id_richiesta, aom_terze_parti
FROM dwh.mnp_dw_rec_tp_online;
BEGIN
errore := 0;
OPEN cur_richiesta;
-- Per ogni richiesta aggiorno lo stato e la data di transizione
LOOP
FETCH cur_richiesta
INTO app_id_richiesta, app_terza_parte;
EXIT WHEN cur_richiesta%NOTFOUND;
UPDATE dwh.mnp_dw_rec_tp_online dw
SET data_configurazione_teorica =
(SELECT MIN (TRUNC (xo.data_invio))
FROM mnp.mnp_xml_out xo, mnp.mnp_xml_richiesta_out xro
WHERE xo.tipo_file = '3'
AND xo.da_inviare IN (0, 2)
AND xo.nome_file = xro.nome_file
AND xro.id_richiesta = app_id_richiesta
AND xo.destinatario = app_terza_parte)
WHERE dw.id_richiesta = app_id_richiesta
AND dw.aom_terze_parti = app_terza_parte;
UPDATE dwh.mnp_dw_rec_tp_online dw
SET data_configurazione_effettiva =
(SELECT MIN (TRUNC (xi.data_eff))
FROM mnp.mnp_xml_in xi, mnp.mnp_xml_richiesta_in xri
WHERE xi.tipo_file = '6'
AND xi.nome_file = xri.nome_file
AND xri.id_richiesta = app_id_richiesta
AND xi.mittente = app_terza_parte
AND xri.richiestaxml LIKE '%<STATO_RICHIESTA_NOTIFICA>4%')
WHERE dw.id_richiesta = app_id_richiesta
AND dw.aom_terze_parti = app_terza_parte;
END LOOP;
CLOSE cur_richiesta;
EXCEPTION
WHEN OTHERS
THEN
errore := 1;
DBMS_OUTPUT.put_line ('Errore in UPDATE_REC_TP_ONLINE ' || SQLERRM);
RETURN;
END; -- Procedure
/

View File

@@ -0,0 +1,48 @@
CREATE OR REPLACE
FUNCTION fun_trova_mese (mese_in IN varchar2)
RETURN varchar2
-- Aggiunge a data_in un numero giorni di giorni lavorativi
IS
mese varchar2(3) := NULL;
BEGIN
if(mese_in = '01') then
mese := 'jan';
elsif(mese_in = '02') then
mese := 'feb';
elsif(mese_in = '03') then
mese := 'mar';
elsif(mese_in = '04') then
mese := 'apr';
elsif(mese_in = '05') then
mese := 'may';
elsif(mese_in = '06') then
mese := 'jun';
elsif(mese_in = '07') then
mese := 'jul';
elsif(mese_in = '08') then
mese := 'aug';
elsif(mese_in = '09') then
mese := 'sep';
elsif(mese_in = '10') then
mese := 'oct';
elsif(mese_in = '11') then
mese := 'nov';
elsif(mese_in = '12') then
mese := 'dec';
end if;
RETURN mese;
END FUN_TROVA_MESE;
/
-- Grants for Function
GRANT EXECUTE ON fun_trova_mese TO public
/
-- End of DDL Script for Function DWH.FUN_TROVA_MESE

View File

@@ -0,0 +1,41 @@
CREATE OR REPLACE FUNCTION "FUN_CALCOLA_DATA"
( nome_file IN VARCHAR2
, orario_chiusura IN VARCHAR2
, data_default IN DATE
) RETURN DATE AS data_finale DATE;
chiusura_finestra DATE;
BEGIN
data_finale := to_timestamp(substr(nome_file,5,14),'YYYYMMDDHH24MISS');
-- verifico se data finale sia un giorno lavorativo
IF data_finale = FUN_DATE_FESTIVE(data_finale) THEN
-- imposto l'ora di chiusura di un giorno lavorativo
chiusura_finestra := to_timestamp(
substr(nome_file,5,8) || orario_chiusura, 'YYYYMMDDHH24MISS');
ELSE
-- nei festivi la finestra ? SEMPRE chiusa
chiusura_finestra := to_timestamp(
substr(nome_file,5,8) || '000000', 'YYYYMMDDHH24MISS');
END IF ;
--DBMS_OUTPUT.put_line('Chiusura = '|| chiusura_finestra);
-- ora verifico se la data finale supera la chiusura
IF data_finale > chiusura_finestra THEN
-- la supera, quindi devo aggiungere un giorno lavorativo
data_finale := FUN_DATE_FESTIVE_SUCC(data_finale+1);
END IF;
RETURN data_finale;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ('Errore in FUN_CALCOLA_DATA ' || SQLERRM);
RETURN data_default;
END FUN_CALCOLA_DATA;
/

View File

@@ -0,0 +1,43 @@
CREATE OR REPLACE FUNCTION "FUN_CALCOLA_DATA_RIC"
(
data_default IN DATE,
orario IN VARCHAR2
) RETURN DATE AS
chiusura_finestra DATE;
datanew DATE;
BEGIN
-- verifico se data finale sia un giorno lavorativo
IF data_default = FUN_DATE_FESTIVE(data_default) THEN
-- imposto l'ora di chiusura di un giorno lavorativo
chiusura_finestra := to_DATE(
to_char(data_default,'YYYYMMDD') ||orario, 'YYYYMMDDHH24MISS');
ELSE
-- nei festivi la finestra ? SEMPRE chiusa
chiusura_finestra := to_date(
to_char(data_default,'YYYYMMDD') || '000000', 'YYYYMMDDHH24MISS');
END IF ;
--DBMS_OUTPUT.put_line('Chiusura = '|| chiusura_finestra);
-- ora verifico se la data finale supera la chiusura
IF data_default> chiusura_finestra THEN
-- la supera, quindi devo aggiungere un giorno lavorativo
datanew := FUN_DATE_FESTIVE_SUCC(data_default+1);
ELSE
datanew := data_default;
END IF;
RETURN datanew;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ('Errore in FUN_CALCOLA_DATA ' || SQLERRM);
RETURN data_default;
END FUN_CALCOLA_DATA_RIC;
/

View File

@@ -0,0 +1,19 @@
CREATE OR REPLACE FUNCTION F_ESTRAI_IMPORTO_SLA(P_ID_OPERATORE mnp.MNP_ANAGRAFICA_OPERATORI.ID_OPERATORE%type, P_SLA VARCHAR2)
RETURN NUMBER IS
v_importo number;
BEGIN
select importo
into v_importo
from mnp.mnp_importi_sla_operatore
where id_operatore = P_ID_OPERATORE
and sla = replace(P_SLA,' ');
return v_importo;
EXCEPTION WHEN OTHERS THEN
return -1;
end F_ESTRAI_IMPORTO_SLA;
/

View File

@@ -0,0 +1,347 @@
spool compila.log
set echo on
@/mnpapp/script/procedure/dwh/DWH.FUN_DATE_FESTIVE.fnc
show err
@/mnpapp/script/procedure/dwh/DWH.FUN_DATE_FESTIVE_SUCC.fnc
show err
@/mnpapp/script/procedure/dwh/DWH.FUN_GIORNI_LAVORATIVI.fnc
show err
@/mnpapp/script/procedure/dwh/DWH.FUN_GIORNI_MENO.fnc
show err
@/mnpapp/script/procedure/dwh/DWH.FUN_GIORNI_PIU.fnc
show err
@/mnpapp/script/procedure/dwh/DWH.FUN_MENO_ORE_LAVORATIVE.fnc
show err
@/mnpapp/script/procedure/dwh/DWH.FUN_ORE_LAVORATIVE.fnc
show err
@/mnpapp/script/procedure/dwh/DWH.FUN_PIU_ORE_LAVORATIVE.fnc
show err
@/mnpapp/script/procedure/dwh/DWH.FUN_PRIMO_GIORNO_LAVORATIVO.fnc
show err
@/mnpapp/script/procedure/dwh/DWH.FUN_ULTIMO_GIORNO_LAVORATIVO.fnc
show err
@/mnpapp/script/procedure/dwh/DWH.CALCOLA_SLA_TERZEPARTI.prc
show err
@/mnpapp/script/procedure/dwh/DWH.CALCOLA_SLA_DONOR.prc
show err
@/mnpapp/script/procedure/dwh/DWH.CALCOLA_SLA_DONOR_HOC.prc
show err
@/mnpapp/script/procedure/dwh/DWH.CALCOLA_SLA_RECIPIENT.prc
show err
@/mnpapp/script/procedure/dwh/DWH.CALCOLA_SLA_RECIPIENT_HOC.prc
show err
@/mnpapp/script/procedure/dwh/DWH.CALCOLA_SLA_RECIPIENT_TACS.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_DONOR_DELTA_2.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_DONOR_HOC_DELTA_2.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_PORTING_DELTA_2.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_REC_DELTA_2.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_REC_HOC_DELTA_2.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_REC_TACS_DELTA_2.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_REC_TACS_TERZE_PARTI.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_REC_TERZE_PARTI.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_REC_HOC_TERZE_PARTI.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_DONOR_DELTA.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_DONOR_HOC_DELTA.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_PORTING_DELTA.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_REC_DELTA.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_REC_HOC_DELTA.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_REC_TACS_DELTA.prc
show err
@/mnpapp/script/procedure/dwh/DWH.CALCOLA_SLA_DONOR_HOC_ONLINE.prc
show err
@/mnpapp/script/procedure/dwh/DWH.CALCOLA_SLA_DONOR_ONLINE.prc
show err
@/mnpapp/script/procedure/dwh/DWH.CALCOLA_SLA_RECIPIENT_ONLINE.prc
show err
@/mnpapp/script/procedure/dwh/DWH.CALCOLA_SLA_REC_HOC_ONLINE.prc
show err
@/mnpapp/script/procedure/dwh/DWH.CALCOLA_SLA_REC_TACS_ONLINE.prc
show err
@/mnpapp/script/procedure/dwh/DWH.CALCOLA_SLA_TP_ONLINE.prc
show err
@/mnpapp/script/procedure/dwh/DWH.CAL_SLA_ANALITICO_DONOR_3PARTI.prc
show err
@/mnpapp/script/procedure/dwh/DWH.CAL_SLA_ANALITICO_RECIPIENT.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_DONOR_HOC_ONLINE_2.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_DONOR_ONLINE_2.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_PORTING_ONLINE_2.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_REC_HOC_ONLINE_2.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_REC_ONLINE_2.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_REC_TACS_ONLINE_2.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_REC_TACS_TP_ONLINE.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_REC_TP_ONLINE.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_REC_HOC_TP_ONLINE.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_REC_TACS_ONLINE_ID.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_REC_TACS_ONLINE_MSISDN.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_REC_ONLINE_ID.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_REC_ONLINE_MSISDN.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_REC_HOC_ONLINE_ID.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_REC_HOC_ONLINE_MSISDN.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_PORTING_ONLINE_ID.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_PORTING_ONLINE_MSISDN.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_DONOR_ONLINE_ID.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_DONOR_ONLINE_MSISDN.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_DONOR_HOC_ONLINE_ID.prc
show err
@/mnpapp/script/procedure/dwh/DWH.UPDATE_DONOR_HOC_ONLINE_MSISDN.prc
show err
@/mnpapp/script/procedure/dwh/DWH.SLA_DONOR_3PARTI_ON_DEMAND.prc
show err
@/mnpapp/script/procedure/dwh/DWH.SLA_RECIPIENT_ON_DEMAND.prc
show err
@/mnpapp/script/procedure/dwh/DWH.DONOR_PORTING_ONLINE_ID.fnc
show err
@/mnpapp/script/procedure/dwh/DWH.DONOR_PORTING_ONLINE_MSISDN.fnc
show err
@/mnpapp/script/procedure/dwh/DWH.RECIPIENT_ONLINE_ID.fnc
show err
@/mnpapp/script/procedure/dwh/DWH.RECIPIENT_ONLINE_MSISDN.fnc
show err
grant all on DWH.MNP_DW_DONOR to MNP;
grant all on DWH.MNP_DW_DONOR_DELTA to MNP;
grant all on DWH.MNP_DW_DONOR_HOC to MNP;
grant all on DWH.MNP_DW_DONOR_HOC_DELTA to MNP;
grant all on DWH.MNP_DW_DONOR_HOC_SLA to MNP;
grant all on DWH.MNP_DW_DONOR_SLA to MNP;
grant all on DWH.MNP_DW_PORTING to MNP;
grant all on DWH.MNP_DW_PORTING_DELTA to MNP;
grant all on DWH.MNP_DW_PORTING_SLA to MNP;
grant all on DWH.MNP_DW_REC to MNP;
grant all on DWH.MNP_DW_REC_DELTA to MNP;
grant all on DWH.MNP_DW_REC_HOC to MNP;
grant all on DWH.MNP_DW_REC_HOC_DELTA to MNP;
grant all on DWH.MNP_DW_REC_HOC_SLA to MNP;
grant all on DWH.MNP_DW_REC_HOC_SLA_TERZEPARTI to MNP;
grant all on DWH.MNP_DW_REC_HOC_TERZEPARTI to MNP;
grant all on DWH.MNP_DW_REC_HOC_TP_DELTA to MNP;
grant all on DWH.MNP_DW_REC_SLA to MNP;
grant all on DWH.MNP_DW_REC_SLA_TERZEPARTI to MNP;
grant all on DWH.MNP_DW_REC_TACS to MNP;
grant all on DWH.MNP_DW_REC_TACS_DELTA to MNP;
grant all on DWH.MNP_DW_REC_TACS_SLA_TERZEPARTI to MNP;
grant all on DWH.MNP_DW_REC_TACS_TERZEPARTI to MNP;
grant all on DWH.MNP_DW_REC_TACS_TP_DELTA to MNP;
grant all on DWH.MNP_DW_REC_TERZEPARTI to MNP;
grant all on DWH.MNP_DW_REC_TERZEPARTI_DELTA to MNP;
grant all on DWH.MNP_DW_REPORT_SLA to MNP;
grant all on DWH.CALCOLA_SLA_DONOR_HOC_ONLINE to MNP;
grant all on DWH.CALCOLA_SLA_DONOR_ONLINE to MNP;
grant all on DWH.CALCOLA_SLA_RECIPIENT_ONLINE to MNP;
grant all on DWH.CALCOLA_SLA_REC_HOC_ONLINE to MNP;
grant all on DWH.CALCOLA_SLA_REC_TACS_ONLINE to MNP;
grant all on DWH.CALCOLA_SLA_TP_ONLINE to MNP;
grant all on DWH.CAL_SLA_ANALITICO_DONOR_3PARTI to MNP;
grant all on DWH.CAL_SLA_ANALITICO_RECIPIENT to MNP;
grant all on DWH.DONOR_PORTING_ONLINE_ID to MNP;
grant all on DWH.DONOR_PORTING_ONLINE_MSISDN to MNP;
grant all on DWH.RECIPIENT_ONLINE_ID to MNP;
grant all on DWH.RECIPIENT_ONLINE_MSISDN to MNP;
grant all on DWH.SLA_DONOR_3PARTI_ON_DEMAND to MNP;
grant all on DWH.SLA_RECIPIENT_ON_DEMAND to MNP;
grant all on DWH.UPDATE_DONOR_HOC_ONLINE_2 to MNP;
grant all on DWH.UPDATE_DONOR_HOC_ONLINE_ID to MNP;
grant all on DWH.UPDATE_DONOR_HOC_ONLINE_MSISDN to MNP;
grant all on DWH.UPDATE_DONOR_ONLINE_2 to MNP;
grant all on DWH.UPDATE_DONOR_ONLINE_ID to MNP;
grant all on DWH.UPDATE_DONOR_ONLINE_MSISDN to MNP;
grant all on DWH.UPDATE_PORTING_ONLINE_2 to MNP;
grant all on DWH.UPDATE_PORTING_ONLINE_ID to MNP;
grant all on DWH.UPDATE_PORTING_ONLINE_MSISDN to MNP;
grant all on DWH.UPDATE_REC_HOC_ONLINE_2 to MNP;
grant all on DWH.UPDATE_REC_HOC_ONLINE_ID to MNP;
grant all on DWH.UPDATE_REC_HOC_ONLINE_MSISDN to MNP;
grant all on DWH.UPDATE_REC_HOC_TP_ONLINE to MNP;
grant all on DWH.UPDATE_REC_ONLINE_2 to MNP;
grant all on DWH.UPDATE_REC_ONLINE_ID to MNP;
grant all on DWH.UPDATE_REC_ONLINE_MSISDN to MNP;
grant all on DWH.UPDATE_REC_TACS_ONLINE_2 to MNP;
grant all on DWH.UPDATE_REC_TACS_ONLINE_ID to MNP;
grant all on DWH.UPDATE_REC_TACS_ONLINE_MSISDN to MNP;
grant all on DWH.UPDATE_REC_TACS_TP_ONLINE to MNP;
grant all on DWH.UPDATE_REC_TP_ONLINE to MNP;
grant execute on DWH.CALCOLA_SLA_DONOR to public;
grant execute on DWH.CALCOLA_SLA_DONOR_HOC to public;
grant execute on DWH.CALCOLA_SLA_RECIPIENT to public;
grant execute on DWH.CALCOLA_SLA_RECIPIENT_HOC to public;
grant execute on DWH.CALCOLA_SLA_RECIPIENT_TACS to public;
grant execute on DWH.CALCOLA_SLA_TERZEPARTI to public;
grant execute on DWH.FUN_DATE_FESTIVE to public;
grant execute on DWH.FUN_DATE_FESTIVE_SUCC to public;
grant execute on DWH.FUN_GIORNI_LAVORATIVI to public;
grant execute on DWH.FUN_GIORNI_MENO to public;
grant execute on DWH.FUN_GIORNI_PIU to public;
grant execute on DWH.FUN_MENO_ORE_LAVORATIVE to public;
grant execute on DWH.FUN_ORE_LAVORATIVE to public;
grant execute on DWH.FUN_PIU_ORE_LAVORATIVE to public;
grant execute on DWH.FUN_PRIMO_GIORNO_LAVORATIVO to public;
grant execute on DWH.FUN_ULTIMO_GIORNO_LAVORATIVO to public;
grant execute on DWH.UPDATE_DONOR_DELTA to public;
grant execute on DWH.UPDATE_DONOR_DELTA_2 to public;
grant execute on DWH.UPDATE_DONOR_HOC_DELTA to public;
grant execute on DWH.UPDATE_DONOR_HOC_DELTA_2 to public;
grant execute on DWH.UPDATE_PORTING_DELTA to public;
grant execute on DWH.UPDATE_PORTING_DELTA_2 to public;
grant execute on DWH.UPDATE_REC_DELTA to public;
grant execute on DWH.UPDATE_REC_DELTA_2 to public;
grant execute on DWH.UPDATE_REC_HOC_DELTA to public;
grant execute on DWH.UPDATE_REC_HOC_DELTA_2 to public;
grant execute on DWH.UPDATE_REC_HOC_TERZE_PARTI to public;
grant execute on DWH.UPDATE_REC_TACS_DELTA to public;
grant execute on DWH.UPDATE_REC_TACS_DELTA_2 to public;
grant execute on DWH.UPDATE_REC_TACS_TERZE_PARTI to public;
grant execute on DWH.UPDATE_REC_TERZE_PARTI to public;
grant execute on DWH.CALCOLA_SLA_DONOR_HOC_ONLINE to public;
grant execute on DWH.CALCOLA_SLA_DONOR_ONLINE to public;
grant execute on DWH.CALCOLA_SLA_RECIPIENT_ONLINE to public;
grant execute on DWH.CALCOLA_SLA_REC_HOC_ONLINE to public;
grant execute on DWH.CALCOLA_SLA_REC_TACS_ONLINE to public;
grant execute on DWH.CALCOLA_SLA_TP_ONLINE to public;
grant execute on DWH.CAL_SLA_ANALITICO_DONOR_3PARTI to public;
grant execute on DWH.CAL_SLA_ANALITICO_RECIPIENT to public;
grant execute on DWH.DONOR_PORTING_ONLINE_ID to public;
grant execute on DWH.DONOR_PORTING_ONLINE_MSISDN to public;
grant execute on DWH.RECIPIENT_ONLINE_ID to public;
grant execute on DWH.RECIPIENT_ONLINE_MSISDN to public;
grant execute on DWH.SLA_DONOR_3PARTI_ON_DEMAND to public;
grant execute on DWH.SLA_RECIPIENT_ON_DEMAND to public;
grant execute on DWH.UPDATE_DONOR_HOC_ONLINE_2 to public;
grant execute on DWH.UPDATE_DONOR_HOC_ONLINE_ID to public;
grant execute on DWH.UPDATE_DONOR_HOC_ONLINE_MSISDN to public;
grant execute on DWH.UPDATE_DONOR_ONLINE_2 to public;
grant execute on DWH.UPDATE_DONOR_ONLINE_ID to public;
grant execute on DWH.UPDATE_DONOR_ONLINE_MSISDN to public;
grant execute on DWH.UPDATE_PORTING_ONLINE_2 to public;
grant execute on DWH.UPDATE_PORTING_ONLINE_ID to public;
grant execute on DWH.UPDATE_PORTING_ONLINE_MSISDN to public;
grant execute on DWH.UPDATE_REC_HOC_ONLINE_2 to public;
grant execute on DWH.UPDATE_REC_HOC_ONLINE_ID to public;
grant execute on DWH.UPDATE_REC_HOC_ONLINE_MSISDN to public;
grant execute on DWH.UPDATE_REC_HOC_TP_ONLINE to public;
grant execute on DWH.UPDATE_REC_ONLINE_2 to public;
grant execute on DWH.UPDATE_REC_ONLINE_ID to public;
grant execute on DWH.UPDATE_REC_ONLINE_MSISDN to public;
grant execute on DWH.UPDATE_REC_TACS_ONLINE_2 to public;
grant execute on DWH.UPDATE_REC_TACS_ONLINE_ID to public;
grant execute on DWH.UPDATE_REC_TACS_ONLINE_MSISDN to public;
grant execute on DWH.UPDATE_REC_TACS_TP_ONLINE to public;
grant execute on DWH.UPDATE_REC_TP_ONLINE to public;
spool off
exit

View File

@@ -0,0 +1,58 @@
CREATE OR REPLACE
PROCEDURE carica_mnp_dwh_xml_in
(data_inizio IN varchar2,
data_fine IN varchar2,
path_file_log in varchar2)
IS
sql_msg varchar2(1000);
sql_code integer;
num_rec_old number;
num_rec number;
puntatore_file_log SYS.UTL_FILE.FILE_TYPE;
BEGIN
puntatore_file_log := UTL_FILE.FOPEN(path_file_log,'CARICA_MNP_DWH_XML_IN'||'_'||to_char(sysdate, 'ddmmyyyy_hh24miss')||'.log','w');
SYS.UTL_FILE.PUT_LINE(puntatore_file_log, 'Inizio Procedura CARICA_MNP_DWH_XML_IN '||to_char(sysdate, 'dd/mm/yyyy hh24:mi:ss'));
delete from mnp_dwh_xml_in where trunc(to_date(substr(nome_file,11,2)||'-'||fun_trova_mese(substr(nome_file,9,2))||'-'||substr(nome_file,5,4))) < trunc(sysdate - 386);
commit;
select count(*) into num_rec_old from mnp_dwh_xml_in;
INSERT INTO mnp_dwh_xml_in
SELECT /*+ leading (x) full(x) parallel(x 4) use_nl(x xr)*/
distinct xr.id_richiesta, x.nome_file, tipo_file
FROM mnp.mnp_xml_in x, mnp.mnp_xml_richiesta_in xr
WHERE xr.nome_file = x.nome_file AND tipo_file IN (6, 11, 12)
and trunc(x.data_eff) >= trunc(to_date(data_inizio))
and trunc(x.data_eff) <= trunc(to_date(data_fine));
commit;
select count(*) - num_rec_old into num_rec from mnp_dwh_xml_in;
SYS.UTL_FILE.PUT_LINE(puntatore_file_log, 'Caricamento tabella MNP_DWH_XML_IN effettuato con '||num_rec||' record.');
sql_msg := sqlerrm;
sql_code := sqlcode;
SYS.UTL_FILE.PUT_LINE(puntatore_file_log, 'Fine Procedura CARICA_MNP_DWH_XML_IN '||to_char(sysdate, 'dd/mm/yyyy hh24:mi:ss')||' sqlmsg: '||sql_msg||' - sqlcode: '||sql_code);
SYS.UTL_FILE.FCLOSE(puntatore_file_log);
EXCEPTION
WHEN OTHERS THEN
sql_msg := sqlerrm;
sql_code := sqlcode;
ROLLBACK;
SYS.UTL_FILE.PUT_LINE(puntatore_file_log, 'Procedura CARICA_MNP_DWH_XML_IN terminata con errore '||to_char(sysdate, 'dd/mm/yyyy_hh24:mi:ss')||' sqlmsg: '||sql_msg||' - sqlcode: '||sql_code);
SYS.UTL_FILE.FCLOSE(puntatore_file_log);
END; -- Procedure
/
-- End of DDL Script for Procedure DWH.CARICA_MNP_DWH_XML_IN

View File

@@ -0,0 +1,193 @@
CREATE OR REPLACE PROCEDURE carica_mnp_dw_xml_in_out
( data_inizio IN varchar2,
data_fine IN varchar2,
path_file_log in varchar2)
IS
sql_msg varchar2(1000);
sql_code integer;
puntatore_file_log SYS.UTL_FILE.FILE_TYPE;
CONT_INS NUMBER := 0;
CURSOR CUR_INS
IS
SELECT
b.id_richiesta id_richiesta,
dwh.fun_extract_msisdn (b.richiestaxml) msisdn, 'XML' tipo_file,
dwh.fun_tipo_notifica_id2desc (a.tipo_file) tipo_notifica,
a.nome_file nome_file, 'Ricevuto' direzione, a.data_eff DATA,
TO_CHAR (a.data_eff, 'dd/mm/yyyy HH24:mi:ss') data_show,
a.destinatario destinatario, a.mittente mittente,
a.canale_alternativo canale_alternativo, d.tipo_processo tipo_processo,
a.nome_file nome_file_xml, NVL(c.nome_file,'-') nome_file_ack, 0 ord2
FROM mnp.mnp_xml_richiesta_in b,
mnp.mnp_xml_ack_out c,
mnp.mnp_xml_in a,
mnp.mnp_xml_out d
WHERE a.nome_file = b.nome_file AND b.nome_file = c.nome_file_riferito(+)
AND c.nome_file = d.nome_file(+)
AND a.data_eff >= to_date(data_inizio,'dd-mon-yyyy')
AND a.data_eff < to_date(data_fine,'dd-mon-yyyy')+1
UNION
SELECT
b.id_richiesta id_richiesta,
dwh.fun_extract_msisdn (b.richiestaxml) msisdn, 'ACK' tipo_file,
dwh.fun_tipo_notifica_id2desc (d.tipo_file) tipo_notifica,
d.nome_file nome_file, 'Ricevuto' direzione, d.data_eff DATA,
TO_CHAR (d.data_eff, 'dd/mm/yyyy HH24:mi:ss') data_show,
d.destinatario destinatario, d.mittente mittente,
d.canale_alternativo canale_alternativo, a.tipo_processo tipo_processo,
b.nome_file nome_file_xml, c.nome_file nome_file_ack, 1 ord2
FROM mnp.mnp_xml_richiesta_out b,
mnp.mnp_xml_ack_in c,
mnp.mnp_xml_out a,
mnp.mnp_xml_in d
WHERE a.nome_file = b.nome_file
AND b.nome_file = c.nome_file_riferito
AND c.nome_file = d.nome_file
AND d.data_eff >= to_date(data_inizio,'dd-mon-yyyy')
AND d.data_eff < to_date(data_fine,'dd-mon-yyyy')+1
UNION
SELECT
b.id_richiesta id_richiesta,
dwh.fun_extract_msisdn (b.richiestaxml) msisdn, 'ACK' tipo_file,
dwh.fun_tipo_notifica_id2desc (d.tipo_file) tipo_notifica,
d.nome_file nome_file, 'Inviato' direzione, d.data_ultimo_invio DATA,
TO_CHAR (d.data_ultimo_invio, 'dd/mm/yyyy HH24:mi:ss') data_show,
d.destinatario destinatario, d.mittente mittente,
d.canale_alternativo canale_alternativo, d.tipo_processo tipo_processo,
b.nome_file nome_file_rif, d.nome_file nome_file_ack, 1 ord2
FROM mnp.mnp_xml_richiesta_in b,
mnp.mnp_xml_ack_out c,
mnp.mnp_xml_out d
WHERE b.nome_file = c.nome_file_riferito
AND c.nome_file = d.nome_file
AND d.data_ultimo_invio >= to_date(data_inizio,'dd-mon-yyyy')
AND d.data_ultimo_invio < to_date(data_fine,'dd-mon-yyyy')+1
UNION
SELECT
b.id_richiesta id_richiesta,
dwh.fun_extract_msisdn (b.richiestaxml) msisdn, 'XML' tipo_file,
dwh.fun_tipo_notifica_id2desc (a.tipo_file) tipo_notifica,
a.nome_file nome_file, 'Inviato' direzione, a.data_ultimo_invio DATA,
TO_CHAR (a.data_ultimo_invio, 'dd/mm/yyyy HH24:mi:ss') data_show,
a.destinatario destinatario, a.mittente mittente,
a.canale_alternativo canale_alternativo, a.tipo_processo tipo_processo,
a.nome_file nome_file_xml, NVL(c.nome_file,'-') nome_file_ack, 0 ord2
FROM mnp.mnp_xml_richiesta_out b,
mnp.mnp_xml_ack_in c,
mnp.mnp_xml_out a
WHERE a.nome_file = b.nome_file
AND b.nome_file = c.nome_file_riferito(+)
AND a.data_ultimo_invio >= to_date(data_inizio,'dd-mon-yyyy')
AND a.data_ultimo_invio < to_date(data_fine,'dd-mon-yyyy')+1;
BEGIN
puntatore_file_log := UTL_FILE.FOPEN(path_file_log,'CARICA_MNP_DW_XML_IN_OUT'||'_'||to_char(sysdate, 'ddmmyyyy_hh24miss')||'.log','w');
SYS.UTL_FILE.PUT_LINE(puntatore_file_log, 'Inizio Procedura CARICA_MNP_DW_XML_IN_OUT '||to_char(sysdate, 'dd/mm/yyyy hh24:mi:ss'));
delete from MNP_DW_XML_IN_OUT where data < sysdate-386;
commit;
--select count(*) into num_rec_old from mnp_dw_xml_in_out;
FOR C_I IN CUR_INS LOOP
BEGIN
INSERT INTO mnp_dw_xml_in_out
(
ID_RICHIESTA,
MSISDN,
TIPO_FILE,
TIPO_NOTIFICA,
NOME_FILE,
DIREZIONE,
DATA,
DATA_SHOW,
DESTINATARIO,
MITTENTE,
CANALE_ALTERNATIVO,
TIPO_PROCESSO,
NOME_FILE_XML,
NOME_FILE_ACK,
ORD2
)
VALUES
(
C_I.id_richiesta,
C_I.msisdn,
C_I.tipo_file,
C_I.tipo_notifica,
C_I.nome_file,
C_I.direzione,
C_I.DATA,
C_I.data_show,
C_I.destinatario,
C_I.mittente,
C_I.canale_alternativo,
C_I.Tipo_processo,
C_I.nome_file_xml,
C_I.nome_file_ack,
C_I.ord2
);
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
-- SE STO INSERENDO LO STESSO FILE VERIFICO CHE SI TRATTA DI UN FILE INVIATO,
-- IN QUESTO CASO AGGIORNO LA DATA DI INVIO NEL CASO SIA UN NUOVO TENTATIVO DI INVIO
BEGIN
IF C_I.direzione = 'Inviato' THEN
UPDATE mnp_dw_xml_in_out
SET DATA = C_I.DATA,
DATA_SHOW = C_I.data_show
WHERE NOME_FILE = C_I.nome_file
AND ID_RICHIESTA = C_I.id_richiesta
AND TIPO_FILE = C_I.tipo_file
AND DIREZIONE = C_I.direzione
AND NOME_FILE_ACK = C_I.nome_file_ack;
ELSE
-- NEGLI ALTRI CASI SEGNALO L'ERRORE
UTL_FILE.PUT_LINE(puntatore_file_log, to_char(sysdate, 'dd/mm/yyyy_hh24:mi:ss')||' Errore nel caricamento del file ' || C_I.direzione ||
' ' || C_I.nome_file || ' di tipo '|| C_I.tipo_file ||' ' ||sqlerrm);
END IF;
EXCEPTION WHEN OTHERS THEN
UTL_FILE.PUT_LINE(puntatore_file_log, to_char(sysdate, 'dd/mm/yyyy_hh24:mi:ss')||' Errore nel caricamento del file ' || C_I.direzione ||
' ' || C_I.nome_file || ' di tipo '|| C_I.tipo_file ||' ' ||sqlerrm);
END;
WHEN OTHERS THEN
UTL_FILE.PUT_LINE(puntatore_file_log, to_char(sysdate, 'dd/mm/yyyy_hh24:mi:ss')||' Errore nel caricamento del file ' || C_I.direzione ||
' ' || C_I.nome_file || ' di tipo '|| C_I.tipo_file ||' ' ||sqlerrm);
END;
IF MOD(CONT_INS, 100000) = 0 THEN
COMMIT;
END IF;
CONT_INS := CONT_INS + 1;
END LOOP;
COMMIT;
--select count(*) - num_rec_old into num_rec from mnp_dw_xml_in_out;
SYS.UTL_FILE.PUT_LINE(puntatore_file_log, 'Caricamento tabella MNP_DW_XML_IN_OUT effettuato con '||CONT_INS||' record.');
SYS.UTL_FILE.PUT_LINE(puntatore_file_log, 'Fine Procedura CARICA_MNP_DW_XML_IN_OUT '||to_char(sysdate, 'dd/mm/yyyy hh24:mi:ss'));
SYS.UTL_FILE.FCLOSE(puntatore_file_log);
EXCEPTION WHEN OTHERS THEN
sql_msg := sqlerrm;
sql_code := sqlcode;
ROLLBACK;
SYS.UTL_FILE.PUT_LINE(puntatore_file_log, 'Procedura CARICA_MNP_DW_XML_IN_OUT terminata con errore '||to_char(sysdate, 'dd/mm/yyyy_hh24:mi:ss')||' sqlmsg: '||sql_msg||' - sqlcode: '||sql_code);
SYS.UTL_FILE.FCLOSE(puntatore_file_log);
END; -- Procedure
/

View File

@@ -0,0 +1,88 @@
CREATE OR REPLACE PROCEDURE P_REPORT_KPI(P_DATA_DA DATE, P_DATA_A DATE) IS
v_mese_comp varchar2(10);
v_rich_attese_controllo number;
v_rich_attese_contrattuali number;
v_rich_inviate_controllo number;
v_perc_controllo number;
v_rich_ricevute_contrattuali number;
v_perc_contrattuali number;
BEGIN
BEGIN
-- ESTRAZIONE DELLE INFORMAZIONI PER I KPI DI CONTROLLO
SELECT A.MESE_COMP,ATTESE,OK_ALLE_12, ROUND((OK_ALLE_12/ATTESE)*100,2) AS PERC
INTO v_mese_comp, v_rich_attese_controllo, v_rich_inviate_controllo, v_perc_controllo
FROM
( SELECT TO_CHAR(DATA_CUT_OVER_CALC,'MM/YYYY') AS MESE_COMP,COUNT(*) AS OK_ALLE_12
FROM MNP.MNP_GESTIONE_RICHIESTA GR, MNP.MNP_XML_RICHIESTA_OUT MTI, MNP.MNP_XML_OUT XO
WHERE GR.DATA_CUT_OVER_CALC BETWEEN P_DATA_DA AND P_DATA_A
AND GR.ID_RICHIESTA =MTI.ID_RICHIESTA
AND MTI.NOME_FILE= XO.NOME_FILE
AND XO.TIPO_FILE =6
AND XO.DESTINATARIO <> 'NPTS'
AND XO.DATA_INVIO <= TO_DATE(TO_CHAR(DATA_CUT_OVER_CALC,'DD_MM_YYYY')||' 12:00','DD_MM_YYYY HH24:MI')
AND GR.ABBONATO_PREPAGATO = 'PREPAGATO'
AND GR.CODICE_CONTROLLO_VALIDAZIONE= 0
GROUP BY TO_CHAR(DATA_CUT_OVER_CALC,'MM/YYYY')
) A,
( SELECT TO_CHAR(DATA_CUT_OVER_CALC,'MM/YYYY') AS MESE_COMP,COUNT(*) AS ATTESE
FROM MNP_GESTIONE_RICHIESTA GR
WHERE GR.DATA_CUT_OVER_CALC BETWEEN P_DATA_DA AND P_DATA_A
AND GR.ABBONATO_PREPAGATO = 'PREPAGATO'
AND GR.CODICE_CONTROLLO_VALIDAZIONE= 0
GROUP BY TO_CHAR(DATA_CUT_OVER_CALC,'MM/YYYY')
)B
WHERE A.MESE_COMP = B.MESE_COMP;
EXCEPTION WHEN OTHERS THEN
v_mese_comp := TO_CHAR(P_DATA_DA,'MM/YYYY');
v_rich_attese_controllo := 0;
v_rich_inviate_controllo := 0;
v_perc_controllo := 0;
END;
--
BEGIN
-- ESTRAZIONE DELLE INFORMAZIONI PER I KPI CONTRATTUALI
SELECT A.MESE_COMP,ATTESE,OK_ALLE_12, ROUND((OK_ALLE_12/ATTESE)*100,2) AS PERC
INTO v_mese_comp, v_rich_attese_contrattuali, v_rich_ricevute_contrattuali, v_perc_contrattuali
FROM
( SELECT TO_CHAR(DATA_CUT_OVER_CALC,'MM/YYYY') AS MESE_COMP,COUNT(*) AS OK_ALLE_12
FROM MNP_GESTIONE_RICHIESTA GR,
( select t.id_richiesta, min(t.data_ricezione) data_ricezione
from mnp_mss_cessazione_in t
group by id_richiesta) MTI
WHERE GR.DATA_CUT_OVER_CALC BETWEEN P_DATA_DA AND P_DATA_A
AND GR.ID_RICHIESTA =MTI.ID_RICHIESTA(+)
AND GR.STATO IN (15, 16)
AND MTI.DATA_RICEZIONE <= TO_DATE(TO_CHAR(DATA_CUT_OVER_CALC,'DD_MM_YYYY')||' 12:00','DD_MM_YYYY HH24:MI')
AND GR.ABBONATO_PREPAGATO = 'PREPAGATO'
GROUP BY TO_CHAR(DATA_CUT_OVER_CALC,'MM/YYYY')
) A,
( SELECT TO_CHAR(DATA_CUT_OVER_CALC,'MM/YYYY') AS MESE_COMP,COUNT(*) AS ATTESE
FROM MNP_GESTIONE_RICHIESTA GR
WHERE GR.DATA_CUT_OVER_CALC BETWEEN P_DATA_DA AND P_DATA_A
AND GR.ABBONATO_PREPAGATO = 'PREPAGATO'
AND GR.CODICE_CONTROLLO_VALIDAZIONE= 0
GROUP BY TO_CHAR(DATA_CUT_OVER_CALC,'MM/YYYY')
)B
WHERE A.MESE_COMP = B.MESE_COMP;
EXCEPTION WHEN OTHERS THEN
v_mese_comp := TO_CHAR(P_DATA_DA,'MM/YYYY');
v_rich_attese_contrattuali := 0;
v_rich_ricevute_contrattuali := 0;
v_perc_contrattuali := 0;
END;
-- INSERIMENTO DATI IN TABELLA
INSERT INTO MNP_DW_REPORT_KPI (MESE_COMP, NUM_RICH_ATTESE_CONTROLLO, NUM_RICH_ATTESE_CONTRATTUALI, NUM_RICH_OK12_CONTROLLO,
NUM_RICH_OK12_CONTRATTUALI, PERC_CONTROLLO, PERC_CONTRATTUALI, DATA_ESECUZIONE)
VALUES (v_mese_comp, v_rich_attese_controllo, v_rich_attese_contrattuali, v_rich_inviate_controllo, v_rich_ricevute_contrattuali,
v_perc_controllo, v_perc_contrattuali, SYSDATE);
COMMIT;
END P_REPORT_KPI;
/

View File

@@ -0,0 +1,111 @@
create or replace procedure P_REPORT_MONITORAGGIORECIPIENT(p_mese_comp varchar2) is
-- parametro in ingresso nel formato mm/yyyy
v_ora_inizio number;
v_ora_fine number;
begin
-- estrazione fascia oraria per inserimento richiesta
select to_number(replace(inizio,':')), to_number(replace(fine,':'))
into v_ora_inizio, v_ora_fine
from mnp.MNP_FASCIA_ORARIA_MONITOR_REC;
-- popolamento tabella
insert into MNP_DW_REPORT_MONITORAGGIO_REC
(mese_comp, tipo_giorno_inserimento, fascia_oraria_richiesta, fascia_oraria_invio, tipo_cliente, numero_richieste)
select p_mese_comp, tipo_giorno, tipologia, tipologia_invio, tipo_cliente, count(*) from (
select rep.*,
case
when to_char(DATA_RICHIESTA, 'HH24miss')<=v_ora_inizio then '1'
when to_char(DATA_RICHIESTA, 'HH24miss')>v_ora_inizio and to_char(DATA_RICHIESTA, 'HH24miss')<= v_ora_fine then '2'
when to_char(DATA_RICHIESTA, 'HH24miss')>v_ora_fine then '3'
end tipologia,
DECODE(DWH.FUN_GIORNI_LAVORATIVI(data_invio, data_richiesta), 0, 0, 1, 1, 2) tipologia_invio
from (SELECT ric."ID_RICHIESTA" ID_RICHIESTA,
NVL(ric."DATA_RICHIESTA", ric."DATA_RICEZIONE") DATA_RICHIESTA,
ric."COD_OP_DON" COD_OP_DON,
xml_out.data_invio data_invio,
rich_rec.tipo_cliente tipo_cliente,
d.tip_gio tipo_giorno
FROM (SELECT msp.id_richiesta id_richiesta,
msp.data_richiesta data_richiesta,
msp.data_ricezione data_ricezione,
msp.codice_operatore_donating cod_op_don
FROM mnp.mnp_msp_in_rec msp
WHERE msp.progetto_ad_hoc = 'N'
UNION
SELECT msc.id_richiesta id_richiesta,
msc.data_richiesta data_richiesta,
msc.data_ricezione data_ricezione,
msc.codice_operatore_donating cod_op_don
FROM mnp.mnp_msc_in_rec msc
WHERE msc.progetto_ad_hoc = 'N'
UNION
SELECT bit.id_richiesta id_richiesta,
NULL data_richiesta, -- DATA_RICHIESTA NON CONTENENTE ORE:MI:SS
bit.data_ricezione_file data_ricezione,
bit.donating_cod_op cod_op_don
FROM mnp.mnp_bit_in_rec bit
WHERE bit.progetto_ad_hoc IS null) ric,
mnp.mnp_xml_out xml_out,
mnp.mnp_xml_richiesta_out richieste_out,
mnp.mnp_gestione_richiesta_rec rich_rec,
MNP.S_DIM_TEMPO d
WHERE xml_out.nome_file = richieste_out.nome_file
AND xml_out.tipo_file = 1
AND richieste_out.id_richiesta = ric.id_richiesta
AND ric.id_richiesta = rich_rec.id_richiesta
AND ric.cod_op_don IN
( SELECT id_operatore
FROM mnp.mnp_anagrafica_operatori
WHERE tipo_operatore = 'RETE')
AND d.data = trunc(NVL(ric."DATA_RICHIESTA", ric."DATA_RICEZIONE"))
UNION -- Donor Virtuale
SELECT ric."ID_RICHIESTA" ID_RICHIESTA,
NVL(ric."DATA_RICHIESTA", ric."DATA_RICEZIONE") DATA_RICHIESTA,
ric."COD_OP_DON" COD_OP_DON,
not_don_out.data_invio data_invio,
rich_don_virt.tipo_cliente tipo_cliente,
d.tip_gio tipo_giorno
FROM (SELECT msp.id_richiesta id_richiesta,
msp.data_richiesta data_richiesta,
msp.data_ricezione data_ricezione,
msp.codice_operatore_donating cod_op_don
FROM mnp.mnp_msp_in_rec msp
WHERE msp.progetto_ad_hoc = 'N'
UNION
SELECT msc.id_richiesta id_richiesta,
msc.data_richiesta data_richiesta,
msc.data_ricezione data_ricezione,
msc.codice_operatore_donating cod_op_don
FROM mnp.mnp_msc_in_rec msc
WHERE msc.progetto_ad_hoc = 'N'
UNION
SELECT bit.id_richiesta id_richiesta,
NULL data_richiesta, -- DATA_RICHIESTA NON CONTENENTE ORE:MI:SS
bit.data_ricezione_file data_ricezione,
bit.donating_cod_op cod_op_don
FROM mnp.mnp_bit_in_rec bit
WHERE bit.progetto_ad_hoc IS null) ric,
mnp.mnp_gest_rich_donor_virt rich_don_virt,
mnp.mnp_mvno_notifica_don_out not_don_out,
MNP.S_DIM_TEMPO d
WHERE not_don_out.id_richiesta_dbc = ric.id_richiesta
AND not_don_out.tipo_evento = '01'
AND ric.id_richiesta = rich_don_virt.id_richiesta
AND ric.cod_op_don IN
(SELECT id_operatore
FROM mnp.mnp_anagrafica_operatori
WHERE tipo_operatore = 'VIRT'
AND gestore_aom = 'TIMG')
AND d.data = trunc(NVL(ric."DATA_RICHIESTA", ric."DATA_RICEZIONE"))) rep
where data_richiesta between to_date('01/'||p_mese_comp,'dd/mm/yyyy') and last_day(to_date('01/'||p_mese_comp,'dd/mm/yyyy'))
)
group by tipo_giorno, tipologia, tipologia_invio, tipo_cliente;
commit;
exception when others then
DBMS_OUTPUT.put_line ('Errore nel popolamento della tabella MNP_DW_REPORT_MONITORAGGIO_REC ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
end P_REPORT_MONITORAGGIORECIPIENT;
/

View File

@@ -0,0 +1,116 @@
CREATE OR REPLACE PROCEDURE calcola_sxmlin (
nomeindicatore IN VARCHAR2,
starthour IN NUMBER,
endhour IN NUMBER,
frequenza IN VARCHAR2,
nomefile IN VARCHAR2,
partizione IN VARCHAR2,
hostaria IN VARCHAR2
)
IS
data_val DATE;
file1 UTL_FILE.file_type;
TYPE rec_valore_type IS RECORD (
desc_olo mnp_olo.desc_olo%TYPE,
tipo_processo_descr mnp_lov.descr%TYPE,
tipo_file_descr mnp_lov.descr%TYPE,
valore NUMBER
);
TYPE cur_valore_type IS REF CURSOR;
cur_valore cur_valore_type;
rec_valore rec_valore_type;
sql_stmt VARCHAR2 (2000);
BEGIN
sql_stmt :=
' SELECT e.desc_olo, e.tipo_processo_descr, e.tipo_file_descr,'
|| ' COUNT (nome_file) valore'
|| ' FROM mnp_xml_in PARTITION ('
|| partizione
|| ') a,'
|| ' (SELECT b.NAME tipo_processo, b.descr tipo_processo_descr,'
|| ' c.NAME tipo_file, c.descr tipo_file_descr, d.desc_olo'
|| ' FROM mnp_lov b, mnp_lov c, mnp_olo d, mnp_lov_ref f'
|| ' WHERE d.flag_terze_parti = 1'
|| ' AND b.lov_name = ''PROCESS'''
|| ' AND c.lov_name = ''XML_FILE_TYPE'''
|| ' AND c.lov_id = f.lov_id'
|| ' AND f.lov_id_ref = b.lov_id'
|| ' AND c.NAME != ''K'') e'
|| ' WHERE TRUNC (SYSDATE) + :starthour / 24 < a.data_eff(+)'
|| ' AND TRUNC (SYSDATE) + :endhour / 24 >= a.data_eff(+)'
|| ' AND e.desc_olo = a.mittente(+)'
|| ' AND e.tipo_file = a.tipo_file(+)'
|| ' GROUP BY e.desc_olo, e.tipo_processo_descr, e.tipo_file_descr';
DBMS_OUTPUT.put_line ( 'apro il file '
|| 'MNP'
|| '.'
|| TO_CHAR (SYSDATE, 'yyyyMMdd')
);
file1 :=
UTL_FILE.fopen (nomefile,
'MNP' || '.' || TO_CHAR (SYSDATE, 'yyyyMMdd'),
'a'
);
OPEN cur_valore
FOR sql_stmt USING starthour, endhour;
data_val := SYSDATE;
LOOP
FETCH cur_valore
INTO rec_valore;
EXIT WHEN cur_valore%NOTFOUND; -- process record
UTL_FILE.put_line (file1,
nomeindicatore
|| ';'
|| rec_valore.desc_olo
|| '-:-'
|| rec_valore.tipo_processo_descr
|| '-:-'
|| rec_valore.tipo_file_descr
|| ';'
|| rec_valore.valore
|| ';'
|| frequenza
|| ';'
|| hostaria
|| ';'
|| TO_CHAR (data_val, 'yyyymmdd')
|| ';'
|| TO_CHAR (data_val, 'hh24:mi:ss')
|| ';'
|| TO_CHAR (SYSDATE, 'yyyymmdd')
|| ';'
|| TO_CHAR (SYSDATE, 'hh24:mi:ss')
|| ';'
|| '0'
|| ';'
|| rec_valore.desc_olo
|| '-:-'
|| rec_valore.tipo_processo_descr
|| '-:-'
|| rec_valore.tipo_file_descr
|| ';;'
);
END LOOP;
CLOSE cur_valore;
UTL_FILE.fflush (file1);
UTL_FILE.fclose (file1);
DBMS_OUTPUT.put_line ( 'chiudo il file '
|| 'MNP'
|| '.'
|| TO_CHAR (SYSDATE, 'yyyyMMdd')
);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (SQLERRM);
END;
/

View File

@@ -0,0 +1,136 @@
CREATE OR REPLACE PROCEDURE calcola_sxmlou (
nomeindicatore IN VARCHAR2,
starthour IN NUMBER,
endhour IN NUMBER,
frequenza IN VARCHAR2,
nomefile IN VARCHAR2,
partizione IN VARCHAR2,
hostaria IN VARCHAR2
)
IS
data_val DATE;
file1 UTL_FILE.file_type;
TYPE rec_valore_type IS RECORD (
desc_olo mnp_olo.desc_olo%TYPE,
tipo_processo_descr mnp_lov.descr%TYPE,
tipo_file_descr mnp_lov.descr%TYPE,
valore NUMBER
);
TYPE cur_valore_type IS REF CURSOR;
cur_valore cur_valore_type;
rec_valore rec_valore_type;
sql_stmt VARCHAR2 (2000);
BEGIN
sql_stmt :=
' SELECT e.desc_olo, e.tipo_processo_descr, e.tipo_file_descr,'
|| ' COUNT (nome_file) valore'
|| ' FROM mnp_xml_out PARTITION ('
|| partizione
|| ') a,'
|| ' (SELECT b.NAME tipo_processo, b.descr tipo_processo_descr,'
|| ' c.NAME tipo_file, c.descr tipo_file_descr, d.desc_olo'
|| ' FROM mnp_lov b, mnp_lov c, mnp_olo d'
|| ' WHERE (d.flag_terze_parti = 1 OR d.desc_olo = ''NPTS'')'
|| ' AND b.lov_name = ''PROCESS'''
|| ' AND c.lov_name = ''XML_FILE_TYPE'''
|| ' AND ((d.flag_terze_parti = 1'
|| ' AND (b.NAME, c.NAME) IN'
|| ' ((''K'', ''7''),'
|| ' (''D'', ''2''),'
|| ' (''D'', ''5''),'
|| ' (''D'', ''6''),'
|| ' (''R'', ''1''),'
|| ' (''R'', ''3''),'
|| ' (''R'', ''9''),'
|| ' (''P'', ''6'')) '
|| ' ) '
|| ' OR (d.desc_olo = ''NPTS'''
|| ' AND (b.NAME, c.NAME) IN'
|| ' ((''K'', ''7''),'
|| ' (''D'', ''6''),'
|| ' (''R'', ''3''),'
|| ' (''R'', ''6''),'
|| ' (''P'', ''6'')) '
|| ' )'
|| ' )) e '
|| ' WHERE TRUNC (SYSDATE) + :starthour / 24 < a.data_invio(+)'
|| ' AND TRUNC (SYSDATE) + :endhour / 24 >= a.data_invio(+)'
|| ' AND e.desc_olo = a.destinatario(+)'
|| ' AND e.tipo_file = a.tipo_file(+)'
|| ' AND e.tipo_processo = a.tipo_processo(+)'
|| ' GROUP BY e.desc_olo, e.tipo_processo_descr, e.tipo_file_descr';
DBMS_OUTPUT.put_line ( 'apro il file '
|| 'MNP'
|| '.'
|| TO_CHAR (SYSDATE, 'yyyyMMdd')
);
file1 :=
UTL_FILE.fopen (nomefile,
'MNP' || '.' || TO_CHAR (SYSDATE, 'yyyyMMdd'),
'a'
);
OPEN cur_valore
FOR sql_stmt USING starthour, endhour;
data_val := SYSDATE;
LOOP
FETCH cur_valore
INTO rec_valore;
EXIT WHEN cur_valore%NOTFOUND;
UTL_FILE.put_line (file1,
nomeindicatore
|| ';'
|| rec_valore.desc_olo
|| '-:-'
|| rec_valore.tipo_processo_descr
|| '-:-'
|| rec_valore.tipo_file_descr
|| ';'
|| rec_valore.valore
|| ';'
|| frequenza
|| ';'
|| hostaria
|| ';'
|| TO_CHAR (data_val, 'yyyymmdd')
|| ';'
|| TO_CHAR (data_val, 'hh24:mi:ss')
|| ';'
|| TO_CHAR (SYSDATE, 'yyyymmdd')
|| ';'
|| TO_CHAR (SYSDATE, 'hh24:mi:ss')
|| ';'
|| '0'
|| ';'
|| rec_valore.desc_olo
|| '-:-'
|| rec_valore.tipo_processo_descr
|| '-:-'
|| rec_valore.tipo_file_descr
|| ';;'
);
END LOOP;
CLOSE cur_valore;
UTL_FILE.fflush (file1);
UTL_FILE.fclose (file1);
DBMS_OUTPUT.put_line ( 'chiudo il file '
|| 'MNP'
|| '.'
|| TO_CHAR (SYSDATE, 'yyyyMMdd')
);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (SQLERRM);
END;
/

View File

@@ -0,0 +1,18 @@
CREATE OR REPLACE FUNCTION F_SPLIT_ID_OPERATORE(P_ID_OPERATORE VARCHAR2 ) RETURN VARCHAR2 IS
V_RESULT MNP_GESTIONE_RICHIESTA_REC.ESPLETAMENTOTERZEPARTI%TYPE;
BEGIN
IF INSTR(P_ID_OPERATORE, ';') > 0 OR LENGTH(TRIM(TRANSLATE(P_ID_OPERATORE, '0123456789', ' '))) IS NOT NULL THEN
RETURN P_ID_OPERATORE;
ELSE
FOR i in 1 .. length(P_ID_OPERATORE) LOOP
V_RESULT := V_RESULT || SUBSTR(P_ID_OPERATORE,i,1)||';';
END LOOP;
RETURN(V_RESULT);
END IF;
END F_SPLIT_ID_OPERATORE;
/

View File

@@ -0,0 +1,9 @@
spool compila.log
set echo on
@/mnpapp/script/procedure/mnp/report_Cessazione.fnc
show err
spool off
exit

View File

@@ -0,0 +1,56 @@
CREATE OR REPLACE PROCEDURE crea_partizione
( p_data_partizione date default sysdate,
p_nome_tabella varchar2,
p_path_file_log varchar2
) IS
-- la procedura prende in ingresso la data di storicizzazione
-- e imposta la data limite della nuova partizione aggiungendo 3 mesi a quella in ingresso
v_data_part varchar2(100);
v_nome_part varchar2(100);
s_partition_name_max varchar2(100);
puntatore_file_log UTL_FILE.FILE_TYPE;
v_anno number;
BEGIN
v_data_part := to_char(p_data_partizione,' yyyy-mm-dd hh24:mi:ss');
-- impostazione del nome della partizione con il seguente formato:
-- yyyy_q anno (yyyy anno corrente - q trimestre di riferimento della partizione)
v_nome_part := 'T'||to_char(trunc(p_data_partizione,'mm')-1,'q');
if v_nome_part = 'T4' then
v_anno := to_number(to_char(p_data_partizione,'yyyy'))-1;
v_nome_part := v_nome_part||'_'||v_anno;
else
v_nome_part := v_nome_part||to_char(p_data_partizione, '_yyyy');
end if;
puntatore_file_log := UTL_FILE.FOPEN(p_path_file_log,'crea_partizione_'||p_nome_tabella||'_'||to_char(sysdate, 'ddmmyyyy_hh24miss')||'.log','a');
UTL_FILE.PUT_LINE(puntatore_file_log, to_char(sysdate, 'dd/mm/yyyy hh24:mi:ss')||' Inizio Procedura crea_partizione per la tabella '||p_nome_tabella);
select a.partition_name
into s_partition_name_max
FROM all_tab_partitions a
where a.table_name = upper(p_nome_tabella)
and a.partition_position =
( select max(partition_position)
from all_tab_partitions
where table_name = upper(p_nome_tabella));
execute immediate('ALTER TABLE '|| p_nome_tabella ||'
SPLIT PARTITION ' || s_partition_name_max || ' AT (TO_DATE('''||v_data_part||''', ''SYYYY-MM-DD HH24:MI:SS'', ''NLS_CALENDAR=GREGORIAN''))
INTO (PARTITION ' || v_nome_part ||',
PARTITION ' ||s_partition_name_max||')');
UTL_FILE.PUT_LINE(puntatore_file_log, 'Creata partizione '||v_nome_part);
UTL_FILE.PUT_LINE(puntatore_file_log, to_char(sysdate, 'dd/mm/yyyy hh24:mi:ss')||' Fine Procedura crea_partizione per la tabella '||v_nome_part);
UTL_FILE.FCLOSE(puntatore_file_log);
EXCEPTION WHEN OTHERS THEN
raise;
END;
/

View File

@@ -0,0 +1,36 @@
CREATE OR REPLACE
FUNCTION trova_data_part
( data_oggi IN date)
return varchar2 IS
s_data_oggi varchar2(30);
s_data_part varchar2(30);
BEGIN
for c IN 0..190 loop
select to_char(data_oggi + c, 'ddmm') into s_data_oggi from dual;
if(s_data_oggi = '0104') then
select ' '||to_char(data_oggi + c, ' yyyy-mm-dd')||' 00:00:00'
into s_data_part
from dual;
exit;
elsif(s_data_oggi = '0110') then
select ' '||to_char(data_oggi + c, ' yyyy-mm-dd')||' 00:00:00'
into s_data_part
from dual;
exit;
end if;
end loop;
RETURN s_data_part ;
END;
/

View File

@@ -0,0 +1,57 @@
CREATE OR REPLACE function f_trova_ultimo_proc_concluso(
p_msisdn varchar2,
p_id_richiesta out varchar2,
p_data out date,
p_processo out varchar2,
p_operatore_rec_rete out varchar2
)
return number is
v_result number;
begin
with t_richieste as(
select id_richiesta, dataricezionerichiesta as data,'D' as processo, codice_operatore_recipient operatore from mnp_gestione_richiesta where msisdn= p_msisdn and stato=16
union
select id_richiesta, dataricezionerichiesta as data,'D' as processo, codice_operatore_recipient operatore from hist_gestione_richiesta where msisdn= p_msisdn and stato=16
union
select id_richiesta, dataricezionerichiesta as data,'R' as processo, codice_operatore_recipient operatore from mnp_gestione_richiesta_rec where msisdn= p_msisdn and stato=12
union
select id_richiesta, dataricezionerichiesta as data,'R' as processo, codice_operatore_recipient operatore from hist_gestione_richiesta_rec where msisdn= p_msisdn and stato=12
union
select id_richiesta, dataricezionerichiesta as data,'V' as processo, 'TIMG' operatore from mnp_gest_rich_donor_virt where msisdn= p_msisdn and stato=11
union
select id_richiesta, dataricezionerichiesta as data,'V' as processo, 'TIMG' operatore from hist_gest_rich_donor_virt where msisdn= p_msisdn and stato=11
union
select id_richiesta, dataricezionerichiesta as data,'W' as processo, 'TIMG' operatore from mnp_gest_rich_rec_virt where msisdn= p_msisdn and stato=12
union
select id_richiesta, dataricezionerichiesta as data,'W' as processo, 'TIMG' operatore from hist_gest_rich_rec_virt where msisdn= p_msisdn and stato=12
union
select id_richiesta, dataricezionerichiesta as data,'P' as processo, codice_operatore_recipient operatore from mnp_gestione_richiesta_porting where msisdn= p_msisdn and stato=6
union
select id_richiesta, dataricezionerichiesta as data,'P' as processo, codice_operatore_recipient operatore from hist_gestione_richiestaporting where msisdn= p_msisdn and stato=6
union
select id_richiesta, dataricezionerichiesta as data,'C' as processo, codice_operatore_recipient operatore from mnp_gestione_richiesta_cess where msisdn= p_msisdn and stato=3
union
select id_richiesta, dataricezionerichiesta as data,'K' as processo, codice_operatore_recipient operatore from mnp_gestione_rich_cess_port where msisdn= p_msisdn and stato=2
)
SELECT *
into p_id_richiesta, p_data, p_processo, p_operatore_rec_rete
from t_richieste
WHERE DATA = (
SELECT MAX(DATA) FROM T_RICHIESTE
)
and rownum < 2;
v_result := 0;
return v_result;
exception when others then
v_result := 1;
return v_result;
end f_trova_ultimo_proc_concluso;
/

View File

@@ -0,0 +1,56 @@
create or replace function f_trova_ultimo_processo(
p_msisdn varchar2,
p_id_richiesta out varchar2,
p_data out date,
p_processo out varchar2
)
return number is
v_result number;
begin
with t_richieste as(
select id_richiesta, dataricezionerichiesta as data,'D' as processo from mnp_gestione_richiesta where msisdn= p_msisdn
union
select id_richiesta, dataricezionerichiesta as data,'D' as processo from hist_gestione_richiesta where msisdn= p_msisdn
union
select id_richiesta, dataricezionerichiesta as data,'R' as processo from mnp_gestione_richiesta_rec where msisdn= p_msisdn
union
select id_richiesta, dataricezionerichiesta as data,'R' as processo from hist_gestione_richiesta_rec where msisdn= p_msisdn
union
select id_richiesta, dataricezionerichiesta as data,'V' as processo from mnp_gest_rich_donor_virt where msisdn= p_msisdn
union
select id_richiesta, dataricezionerichiesta as data,'V' as processo from hist_gest_rich_donor_virt where msisdn= p_msisdn
union
select id_richiesta, dataricezionerichiesta as data,'W' as processo from mnp_gest_rich_rec_virt where msisdn= p_msisdn
union
select id_richiesta, dataricezionerichiesta as data,'W' as processo from hist_gest_rich_rec_virt where msisdn= p_msisdn
union
select id_richiesta, dataricezionerichiesta as data,'P' as processo from mnp_gestione_richiesta_porting where msisdn= p_msisdn
union
select id_richiesta, dataricezionerichiesta as data,'P' as processo from hist_gestione_richiestaporting where msisdn= p_msisdn
union
select id_richiesta, dataricezionerichiesta as data,'C' as processo from mnp_gestione_richiesta_cess where msisdn= p_msisdn
union
select id_richiesta, dataricezionerichiesta as data,'K' as processo from mnp_gestione_rich_cess_port where msisdn= p_msisdn
)
SELECT *
into p_id_richiesta, p_data, p_processo
from t_richieste
WHERE DATA = (
SELECT MAX(DATA) FROM T_RICHIESTE
)
and rownum < 2;
v_result := 0;
return v_result;
exception when others then
v_result := 1;
return v_result;
end f_trova_ultimo_processo;
/

View File

@@ -0,0 +1,36 @@
CREATE OR REPLACE FUNCTION report_cessazione RETURN VARCHAR2 IS
rs varchar2(255);
file1 UTL_FILE.file_type;
path varchar2(255);
filename varchar2(255);
CURSOR cur_res is
select b.codice_richiesta_recipient || ';' || b.msisdn
from mnp_gestione_richiesta_cess b
where b.stato = 1
and b.da_processare = 1
and tim_donor =1;
BEGIN
select directory_path
into path
from all_directories
where directory_name='PATH_REPORT_CESS';
filename := 'CESSAZIONI_'||to_char(sysdate,'yyyyMMddhh24miss')||'.txt';
file1 := UTL_FILE.fopen ('PATH_REPORT_CESS',filename, 'w');
UTL_FILE.put_line (file1,'Codice richiesta; Msisdn');
OPEN cur_res;
LOOP
FETCH cur_res INTO rs;
EXIT WHEN cur_res%NOTFOUND;
UTL_FILE.put_line (file1,rs);
END LOOP;
CLOSE cur_res;
UTL_FILE.fflush (file1);
UTL_FILE.fclose (file1);
return path||'/'||filename;
END;
/