Files
gateway-mnp-dbc/dbcmnpsrc/FE/mnpapp/script/dbUpDate/KitDicembre09/dwhDML.sql
2024-05-13 12:54:14 +02:00

1133 lines
38 KiB
SQL

CREATE OR REPLACE FUNCTION "DWH"."FUN_CALCOLA_DATA"
( nome_file 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) || '191500', '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;
/
CREATE OR REPLACE PROCEDURE "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
---------------------------------------
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_effettivo, recipient_effettivo,
dco_effettiva, data_notifica_credito, processo, nome_file)
SELECT UNIQUE gr.id_richiesta, 'SLA X', xml.data_eff, gr.codice_operatore_don_eff,
gr.codice_operatore_rec_eff, gr.data_cut_over_eff,
MIN (fun_calcola_data (xml.nome_file, xml.data_eff)), 'D', xml.nome_file
FROM mnp.mnp_xml_out@mnp xml,
mnp.mnp_xml_richiesta_out@mnp rout,
mnp.mnp_gestione_richiesta@mnp gr
WHERE xml.tipo_processo = 'D'
AND rout.id_richiesta = gr.id_richiesta
AND xml.tipo_file = '10'
AND xml.nome_file = rout.nome_file
AND xml.data_eff >= data_iniziale
AND xml.data_eff < data_finale
GROUP BY gr.id_richiesta,
xml.data_eff,
gr.codice_operatore_don_eff,
gr.codice_operatore_rec_eff,
gr.data_cut_over_eff,
xml.nome_file;
-- ora carico le notifiche di sblocco importo
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta, tipo_messaggio, data_messaggio, donor_effettivo, recipient_effettivo,
data_sbl_importo, processo, nome_file)
SELECT UNIQUE gr.id_richiesta, 'SLA Y', xml.data_eff, gr.codice_operatore_don_eff,
gr.codice_operatore_rec_eff,
MIN (fun_calcola_data (xml.nome_file, xml.data_eff)), 'D', xml.nome_file
FROM mnp.mnp_xml_out@mnp xml,
mnp.mnp_xml_richiesta_out@mnp rout,
mnp.mnp_gestione_richiesta@mnp gr
WHERE xml.tipo_processo = 'D'
AND rout.id_richiesta = gr.id_richiesta
AND xml.tipo_file = '12'
AND xml.nome_file = rout.nome_file
AND xml.data_eff >= data_iniziale
AND xml.data_eff < data_finale
GROUP BY gr.id_richiesta,
xml.data_eff,
gr.codice_operatore_don_eff,
gr.codice_operatore_rec_eff,
gr.data_cut_over_eff,
xml.nome_file;
-- e infine le notifiche di sblocco credito anomalo
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta, tipo_messaggio, data_messaggio, donor_effettivo, recipient_effettivo,
data_sbl_credito_anomalo, processo, nome_file)
SELECT UNIQUE gr.id_richiesta, 'SLA Z', xml.data_eff, gr.codice_operatore_don_eff,
gr.codice_operatore_rec_eff,
MIN (fun_calcola_data (xml.nome_file, xml.data_eff)), 'D', xml.nome_file
FROM mnp.mnp_xml_out@mnp xml,
mnp.mnp_xml_richiesta_out@mnp rout,
mnp.mnp_gestione_richiesta@mnp gr
WHERE xml.tipo_processo = 'D'
AND rout.id_richiesta = gr.id_richiesta
AND xml.tipo_file = '11'
AND xml.nome_file = rout.nome_file
AND xml.data_eff >= data_iniziale
AND xml.data_eff < data_finale
GROUP BY gr.id_richiesta,
xml.data_eff,
gr.codice_operatore_don_eff,
gr.codice_operatore_rec_eff,
gr.data_cut_over_eff,
xml.nome_file;
-- 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@mnp nc, mnp.mnp_xml_out@mnp 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;
/
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_effettivo,
recipient_effettivo,
dco_effettiva,
data_notifica_credito,
PROCESSO
)
SELECT UNIQUE gr.id_richiesta,
'SLA X',
tcin.data_ricezione,
gr.codice_operatore_donating,
gr.codice_operatore_recipient,
gr.data_cut_over_eff,
MIN(tcin.data_ricezione),
'R'
FROM mnp.mnp_mspcoop_tc_in@MNP tcin,
mnp.mnp_gest_rich_donor_virt@MNP 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,
tcin.data_ricezione,
gr.codice_operatore_donating,
gr.codice_operatore_recipient,
gr.data_cut_over_eff
;
-- ora carico le notifiche di sblocco importo
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta,
tipo_messaggio,
data_messaggio,
donor_effettivo,
recipient_effettivo,
dco_effettiva,
data_sbl_importo,
PROCESSO
)
SELECT UNIQUE gr.id_richiesta,
'SLA Y',
tcin.data_ricezione,
gr.codice_operatore_donating,
gr.codice_operatore_recipient,
gr.data_cut_over_eff,
MIN(tcin.data_ricezione),
'R'
FROM mnp.mnp_mspcoop_tc_in@MNP tcin,
mnp.mnp_gest_rich_donor_virt@MNP gr
WHERE tcin.id_richiesta_dbc = gr.id_richiesta
AND SUBSTR(tcin.id_richiesta_dbc,0,2)='DV'
AND tcin.tipo_evento = '03'
AND tcin.data_ricezione >= data_iniziale
AND tcin.data_ricezione < data_finale
GROUP BY gr.id_richiesta,
tcin.data_ricezione,
gr.codice_operatore_donating,
gr.codice_operatore_recipient,
gr.data_cut_over_eff
;
-- 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;
/
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
---------------------------------------
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_effettivo,
recipient_effettivo,
dco_effettiva,
data_notifica_credito,
PROCESSO
)
SELECT UNIQUE gr.id_richiesta,
'SLA X',
MIN(tcin.data_ricezione),
gr.codice_operatore_donating,
gr.codice_operatore_recipient,
gr.data_cut_over_eff,
MIN(tcin.data_ricezione),
'R'
FROM mnp.mnp_mvno_tc_in@MNP tcin,
mnp.mnp_gest_rich_donor_virt@MNP 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.codice_operatore_donating,
gr.codice_operatore_recipient,
gr.data_cut_over_eff
;
-- ora carico le notifiche di sblocco importo
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta,
tipo_messaggio,
data_messaggio,
donor_effettivo,
recipient_effettivo,
dco_effettiva,
data_sbl_importo,
PROCESSO
)
SELECT UNIQUE gr.id_richiesta,
'SLA Y',
MIN(tcin.data_ricezione),
gr.codice_operatore_donating,
gr.codice_operatore_recipient,
gr.data_cut_over_eff,
MIN(tcin.data_ricezione),
'R'
FROM mnp.mnp_mvno_tc_in@MNP tcin,
mnp.mnp_gest_rich_donor_virt@MNP gr
WHERE tcin.id_richiesta_dbc = gr.id_richiesta
AND SUBSTR(tcin.id_richiesta_dbc,0,2)='DV'
AND tcin.tipo_evento = '03'
AND tcin.data_ricezione >= data_iniziale
AND tcin.data_ricezione < data_finale
GROUP BY gr.id_richiesta,
gr.codice_operatore_donating,
gr.codice_operatore_recipient,
gr.data_cut_over_eff
;
-- e infine le notifiche di sblocco credito anomalo
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta,
tipo_messaggio,
data_messaggio,
donor_effettivo,
recipient_effettivo,
dco_effettiva,
data_sbl_credito_anomalo,
PROCESSO
)
SELECT UNIQUE gr.id_richiesta,
'SLA Z',
MIN(tcin.data_ricezione),
gr.codice_operatore_donating,
gr.codice_operatore_recipient,
gr.data_cut_over_eff,
MIN(tcin.data_ricezione),
'R'
FROM mnp.mnp_mvno_tc_in@MNP tcin,
mnp.mnp_gest_rich_donor_virt@MNP gr
WHERE tcin.id_richiesta_dbc = gr.id_richiesta
AND SUBSTR(tcin.id_richiesta_dbc,0,2)='DV'
AND tcin.tipo_evento = '02'
AND tcin.data_ricezione >= data_iniziale
AND tcin.data_ricezione < data_finale
GROUP BY gr.id_richiesta,
gr.codice_operatore_donating,
gr.codice_operatore_recipient,
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 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;
/
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
---------------------------------------
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_effettivo,
recipient_effettivo,
dco_effettiva,
data_notifica_credito,
PROCESSO
)
SELECT UNIQUE gr.id_richiesta,
'SLA X',
tcin.data_ricezione,
gr.codice_operatore_donating,
gr.codice_operatore_recipient,
gr.data_cut_over_eff,
MIN(tcin.data_ricezione),
'V'
FROM mnp.mnp_mvno_tc_in@MNP tcin,
mnp.mnp_gest_rich_rec_virt@MNP 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',
tcin.data_ricezione,
gr.codice_operatore_donating,
gr.codice_operatore_recipient,
gr.data_cut_over_eff
;
-- ora carico le notifiche di sblocco importo
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta,
tipo_messaggio,
data_messaggio,
donor_effettivo,
recipient_effettivo,
dco_effettiva,
data_sbl_importo,
PROCESSO
)
SELECT UNIQUE gr.id_richiesta,
'SLA Y',
tcin.data_ricezione,
gr.codice_operatore_donating,
gr.codice_operatore_recipient,
gr.data_cut_over_eff,
MIN(tcin.data_ricezione),
'V'
FROM mnp.mnp_mvno_tc_in@MNP tcin,
mnp.mnp_gest_rich_rec_virt@MNP gr
WHERE tcin.id_richiesta_dbc = gr.id_richiesta
AND SUBSTR(tcin.id_richiesta_dbc,0,2)='RV'
AND tcin.tipo_evento = '03'
AND tcin.data_ricezione >= data_iniziale
AND tcin.data_ricezione < data_finale
GROUP BY gr.id_richiesta,
'SLA Y',
tcin.data_ricezione,
gr.codice_operatore_donating,
gr.codice_operatore_recipient,
gr.data_cut_over_eff
;
-- ora carico le notifiche di sblocco credito anomalo
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta,
tipo_messaggio,
data_messaggio,
donor_effettivo,
recipient_effettivo,
dco_effettiva,
data_sbl_credito_anomalo,
PROCESSO
)
SELECT UNIQUE gr.id_richiesta,
'SLA Z',
tcin.data_ricezione,
gr.codice_operatore_donating,
gr.codice_operatore_recipient,
gr.data_cut_over_eff,
MIN(tcin.data_ricezione),
'V'
FROM mnp.mnp_mvno_tc_in@MNP tcin,
mnp.mnp_gest_rich_rec_virt@MNP gr
WHERE tcin.id_richiesta_dbc = gr.id_richiesta
AND SUBSTR(tcin.id_richiesta_dbc,0,2)='RV'
AND tcin.tipo_evento = '02'
AND tcin.data_ricezione >= data_iniziale
AND tcin.data_ricezione < data_finale
GROUP BY gr.id_richiesta,
'SLA Z',
tcin.data_ricezione,
gr.codice_operatore_donating,
gr.codice_operatore_recipient,
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 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;
/
CREATE OR REPLACE PROCEDURE "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
---------------------------------------
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_effettivo,
RECIPIENT_EFFETTIVO,
dco_effettiva,
data_notifica_credito,
processo,
nome_file
)
SELECT UNIQUE gr.id_richiesta,
'SLA X',
xml.data_eff,
gr.codice_operatore_don_eff,
GR.CODICE_OPERATORE_REC_EFF,
gr.data_cut_over_eff,
MIN(FUN_CALCOLA_DATA(xml.nome_file,ack.data_inserimento)),
'R',
xml.nome_file
FROM mnp.mnp_xml_ack_out@MNP ack,
mnp.mnp_xml_in@MNP xml,
mnp.mnp_xml_richiesta_in@MNP rin,
mnp.mnp_gestione_richiesta_rec@MNP gr
WHERE ack.risultato = 'OK'
AND ack.nome_file_riferito = xml.nome_file
AND rin.id_richiesta = gr.id_richiesta
AND xml.tipo_file = '10'
AND xml.nome_file = rin.nome_file
AND ack.data_inserimento >= data_iniziale
AND ack.data_inserimento < data_finale
GROUP BY gr.id_richiesta,
xml.data_eff,
gr.codice_operatore_don_eff,
GR.CODICE_OPERATORE_REC_EFF,
gr.data_cut_over_eff,
xml.nome_file
;
-- ora carico le notifiche di sblocco importo
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta,
tipo_messaggio,
data_messaggio,
donor_effettivo,
RECIPIENT_EFFETTIVO,
dco_effettiva,
data_sbl_importo,
processo,
nome_file
)
SELECT UNIQUE gr.id_richiesta,
'SLA Y',
xml.data_eff,
gr.codice_operatore_don_eff,
GR.CODICE_OPERATORE_REC_EFF,
gr.data_cut_over_eff,
MIN(FUN_CALCOLA_DATA(xml.nome_file,ack.data_inserimento)),
'R',
xml.nome_file
FROM mnp.mnp_xml_ack_out@MNP ack,
mnp.mnp_xml_in@MNP xml,
mnp.mnp_xml_richiesta_in@MNP rin,
mnp.mnp_gestione_richiesta_rec@MNP gr
WHERE ack.risultato = 'OK'
AND rin.id_richiesta = gr.id_richiesta
AND ack.nome_file_riferito = xml.nome_file
AND xml.tipo_file = '12'
AND xml.nome_file = rin.nome_file
AND ack.data_inserimento >= data_iniziale
AND ack.data_inserimento < data_finale
GROUP BY gr.id_richiesta,
xml.data_eff,
gr.codice_operatore_don_eff,
GR.CODICE_OPERATORE_REC_EFF,
gr.data_cut_over_eff,
xml.nome_file
;
-- e infine le notifiche di sblocco credito anomalo
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta,
tipo_messaggio,
data_messaggio,
donor_effettivo,
RECIPIENT_EFFETTIVO,
dco_effettiva,
data_sbl_credito_anomalo,
processo,
nome_file
)
SELECT UNIQUE gr.id_richiesta,
'SLA Z',
xml.data_eff,
gr.codice_operatore_don_eff,
GR.CODICE_OPERATORE_REC_EFF,
gr.data_cut_over_eff,
MIN(FUN_CALCOLA_DATA(xml.nome_file,ack.data_inserimento)),
'R',
xml.nome_file
FROM mnp.mnp_xml_ack_out@MNP ack,
mnp.mnp_xml_in@MNP xml,
mnp.mnp_xml_richiesta_in@MNP rin,
mnp.mnp_gestione_richiesta_rec@MNP gr
WHERE ack.risultato = 'OK'
AND ack.nome_file_riferito = xml.nome_file
AND rin.id_richiesta = gr.id_richiesta
AND xml.tipo_file = '11'
AND xml.nome_file = rin.nome_file
AND ack.data_inserimento >= data_iniziale
AND ack.data_inserimento < data_finale
GROUP BY gr.id_richiesta,
xml.data_eff,
gr.codice_operatore_don_eff,
GR.CODICE_OPERATORE_REC_EFF,
gr.data_cut_over_eff,
xml.nome_file
;
-- 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@MNP rich, mnp.mnp_xml_in@mnp 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;
/
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_effettivo,
recipient_effettivo,
dco_effettiva,
data_notifica_credito,
PROCESSO
)
SELECT UNIQUE gr.id_richiesta,
'SLA X',
tcin.data_ricezione,
gr.codice_operatore_donating,
gr.codice_operatore_recipient,
gr.data_cut_over_eff,
MIN(tcin.data_ricezione),
'D'
FROM mnp.mnp_msp_tc_in@MNP tcin,
mnp.mnp_gest_rich_rec_virt@MNP 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,
tcin.data_ricezione,
gr.codice_operatore_donating,
gr.codice_operatore_recipient,
gr.data_cut_over_eff
;
-- ora carico le notifiche di sblocco importo
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta,
tipo_messaggio,
data_messaggio,
donor_effettivo,
recipient_effettivo,
dco_effettiva,
data_sbl_importo,
PROCESSO
)
SELECT UNIQUE gr.id_richiesta,
'SLA Y',
tcin.data_ricezione,
gr.codice_operatore_donating,
gr.codice_operatore_recipient,
gr.data_cut_over_eff,
MIN(tcin.data_ricezione),
'D'
FROM mnp.mnp_msp_tc_in@MNP tcin,
mnp.mnp_gest_rich_rec_virt@MNP gr
WHERE tcin.id_richiesta_dbc = gr.id_richiesta
AND SUBSTR(tcin.id_richiesta_dbc,0,2)='RV'
AND tcin.tipo_evento = '03'
AND tcin.data_ricezione >= data_iniziale
AND tcin.data_ricezione < data_finale
GROUP BY gr.id_richiesta,
tcin.data_ricezione,
gr.codice_operatore_donating,
gr.codice_operatore_recipient,
gr.data_cut_over_eff
;
-- 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;
/
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
---------------------------------------
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_effettivo,
recipient_effettivo,
dco_effettiva,
data_notifica_credito,
PROCESSO
)
SELECT UNIQUE gr.id_richiesta,
'SLA X',
tcin.data_ricezione,
gr.codice_operatore_donating,
gr.codice_operatore_recipient,
gr.data_cut_over_eff,
MIN(tcin.data_ricezione),
'D'
FROM mnp.mnp_mspcoop_tc_in@MNP tcin,
mnp.mnp_gest_rich_rec_virt@MNP 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,
tcin.data_ricezione,
gr.codice_operatore_donating,
gr.codice_operatore_recipient,
gr.data_cut_over_eff
;
-- ora carico le notifiche di sblocco importo
INSERT INTO dwh.mnp_dw_sla_tc_out
(id_richiesta,
tipo_messaggio,
data_messaggio,
donor_effettivo,
recipient_effettivo,
dco_effettiva,
data_sbl_importo,
PROCESSO
)
SELECT UNIQUE gr.id_richiesta,
'SLA Y',
tcin.data_ricezione,
gr.codice_operatore_donating,
gr.codice_operatore_recipient,
gr.data_cut_over_eff,
MIN(tcin.data_ricezione),
'D'
FROM mnp.mnp_mspcoop_tc_in@MNP tcin,
mnp.mnp_gest_rich_rec_virt@MNP gr
WHERE tcin.id_richiesta_dbc = gr.id_richiesta
AND SUBSTR(tcin.id_richiesta_dbc,0,2)='RV'
AND tcin.tipo_evento = '03'
AND tcin.data_ricezione >= data_iniziale
AND tcin.data_ricezione < data_finale
GROUP BY gr.id_richiesta,
tcin.data_ricezione,
gr.codice_operatore_donating,
gr.codice_operatore_recipient,
gr.data_cut_over_eff
;
-- 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;
/
CREATE OR REPLACE PROCEDURE "DWH"."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
--
-------------------------------------------------------
errore_don NUMBER (1);
errore_rec NUMBER (1);
errore_dv_mvno NUMBER (1);
errore_dv_esp NUMBER (1);
errore_rv_mvno NUMBER (1);
errore_rv_esp NUMBER (1);
errore_m2m NUMBER(1);
errore NUMBER (1);
BEGIN
cod_errore := 0;
-- caricamento notifiche DONOR
dwh.caricamento_sla_tc_don (mese_in,anno_in, errore_don);
-- caricamento notifiche RECIPIENT
dwh.caricamento_sla_tc_rec (mese_in,anno_in, errore_rec);
-- caricamento notifiche processi VIRTUALI
dwh.caricamento_sla_tc_dv_mvno (mese_in,anno_in, errore_dv_mvno);
dwh.caricamento_sla_tc_dv_esp (mese_in,anno_in, errore_dv_esp);
dwh.caricamento_sla_tc_rv_mvno (mese_in,anno_in, errore_rv_mvno);
dwh.caricamento_sla_tc_rv_esp (mese_in,anno_in, errore_rv_esp);
dwh.caricamento_sla_tc_mvno2mvno (mese_in,anno_in, errore_m2m);
errore := errore_don + errore_rec + errore_dv_mvno +
errore_dv_esp + errore_rv_mvno + errore_rv_esp +
errore_m2m;
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; -- Procedure
/
CREATE OR REPLACE PROCEDURE "DWH"."CALCOLO_SLA_TC"
AS
mese_in NUMBER;
anno_in NUMBER;
data_in DATE;
data_iniziale DATE;
cod_errore NUMBER;
BEGIN
cod_errore := 0;
data_in := add_months(sysdate,-1);
mese_in := to_number(to_char(data_in,'MM'),'99');
anno_in := to_number(to_char(data_in,'YYYY'),'9999');
DBMS_OUTPUT.put_line('Mese da calcolare : ' || mese_in);
DBMS_OUTPUT.put_line('Anno da calcolare : ' || anno_in);
data_iniziale := to_date('1-'|| mese_in||'-'|| anno_in,'DD-MM-YYYY');
-- CARICAMENTO DATI
-- caricamento dati nella tabella temporanea MNP_DW_SLA_TC_IN
dwh.caricamento_sla_tc(mese_in,anno_in, cod_errore);
IF cod_errore = 0
THEN
-- tutto a posto
DBMS_OUTPUT.put_line ('Avvio procedura di calcolo delle penali');
END IF;
-- CALCOLO SLA X
-- calcolo i giorni di ritardo per lo SLAX
UPDATE dwh.mnp_dw_sla_tc_out SET
numero_giorni_ritardo = trunc(data_notifica_credito -dwh.FUN_GIORNI_PIU(dco_effettiva,2))
WHERE tipo_messaggio = 'SLA X'
AND numero_giorni_ritardo IS NULL
;
-- CALCOLO SLA Y
-- calcolo i giorni di ritardo per lo SLAY
UPDATE dwh.mnp_dw_sla_tc_out SET
numero_giorni_ritardo = trunc(data_sbl_importo-dwh.FUN_GIORNI_PIU(data_notifica_credito,5))
WHERE tipo_messaggio = 'SLA Y'
AND numero_giorni_ritardo IS NULL
;
-- CALCOLO SLA Z
-- calcolo i giorni di ritardo per lo SLAZ
UPDATE dwh.mnp_dw_sla_tc_out SET
numero_giorni_ritardo = trunc(data_sbl_credito_anomalo-dwh.FUN_GIORNI_PIU(data_notifica_credito,5))
WHERE tipo_messaggio = 'SLA Z'
AND numero_giorni_ritardo IS NULL
;
-- se i giorni di ritardo sono < 0 (cioè non c'è ritardo) li
-- cancello i record corrispondenti
DELETE FROM dwh.mnp_dw_sla_tc_out
WHERE numero_giorni_ritardo <= 0 ;
-- infine calcolo la penale di 10 euro al giorno
UPDATE dwh.mnp_dw_sla_tc_out
SET penale = numero_giorni_ritardo * 10
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;
/