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; /