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 , t_iniziale , t_finale , processo , nome_file , nome_file_iniziale , nome_file_finale , donor_ospitato , rec_ospitato , msisdn , codice_richiesta_recipient , ack_iniziale , ack_finale , data_attesa_evento_fin , mese_comp_finale ) SELECT UNIQUE gr.id_richiesta , 'SLA X' , MIN(trasXml.data_eff) , gr.codice_operatore_don_eff , gr.codice_operatore_rec_eff , gr.data_cut_over_eff , MIN (fun_calcola_data (trasXml.nome_file, trasXml.data_eff)) -- data_notifica_credito , MIN (fun_calcola_data (espAckIn.nome_file, espXml.data_eff)) -- data estratta dell ack inviato al Recipient in risposta all'espletamento del donating , MIN (fun_calcola_data (trasXml.nome_file, trasXml.data_eff)) -- data estratta dal nome della notifica credito , 'D' , MIN(trasXml.nome_file) -- nome file della notifica credito , MIN(espAckIn.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 , MIN(espAckIn.nome_file) , MIN(trasAckIn.nome_file) , TO_DATE( SUBSTR( MIN(trasXml.NOME_FILE), 5 , 14) ,'YYYYMMDDHH24MISS' ) , TO_CHAR ( TO_DATE( SUBSTR( MIN(trasXml.NOME_FILE), 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') FROM mnp.mnp_xml_ack_in@mnp espAckIn ,mnp.mnp_xml_richiesta_out@mnp rEsp ,mnp.mnp_xml_out@mnp espXml ,mnp.mnp_xml_out@mnp trasXml ,mnp.mnp_xml_richiesta_out@mnp rTras ,mnp.mnp_xml_ack_in@mnp trasAckIn ,mnp.mnp_gestione_richiesta@mnp gr WHERE trasXml.tipo_processo = 'D' 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 trasXml.data_eff >= data_iniziale AND trasXml.data_eff < data_finale GROUP BY gr.id_richiesta ,trasXml.data_eff ,gr.codice_operatore_don_eff ,gr.codice_operatore_rec_eff ,gr.data_cut_over_eff ,trasXml.nome_file ,espAckIn.nome_file ,trasXml.nome_file ,gr.msisdn ,gr.codice_richiesta_recipient ,trasAckIn.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_notifica_credito , data_sbl_credito_anomalo , t_iniziale , t_finale , processo , nome_file , nome_file_iniziale , nome_file_finale , donor_ospitato , rec_ospitato , msisdn , codice_richiesta_recipient , ack_iniziale , ack_finale , data_attesa_evento_fin , mese_comp_finale ) SELECT UNIQUE gr.id_richiesta , 'SLA Y' , MIN(sblCrXml.data_eff) , gr.codice_operatore_don_eff , gr.codice_operatore_rec_eff , gr.data_cut_over_eff , MIN (fun_calcola_data (trasXml.nome_file, trasXml.data_eff)) -- data trasferimento credito , MIN (fun_calcola_data (sblCrXml.nome_file, sblCrXml.data_eff)) -- data_sbl_credito_anomalo , MIN (fun_calcola_data (trasAckIn.nome_file, trasXml.data_eff)) -- data estratta dell ack inviato al Recipient in risposta al trasferimento credito del donating , MIN (fun_calcola_data (sblCrXml.nome_file, sblCrXml.data_eff)) -- data estratta dal nome sblocco credito anomalo out , 'D' , MIN(sblCrXml.nome_file) -- nome file della notifica credito , MIN(trasAckIn.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) , TO_DATE( SUBSTR( MIN(sblCrXml.NOME_FILE), 5 , 14) ,'YYYYMMDDHH24MISS' ) , TO_CHAR ( TO_DATE( SUBSTR( MIN(sblCrXml.NOME_FILE), 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') FROM mnp.mnp_xml_ack_in@mnp trasAckIn ,mnp.mnp_xml_richiesta_out@mnp rTras ,mnp.mnp_xml_out@mnp trasXml ,mnp.mnp_xml_out@mnp sblCrXml ,mnp.mnp_xml_richiesta_out@mnp rSblCr ,mnp.mnp_xml_ack_in@mnp sblCrAckIn ,mnp.mnp_gestione_richiesta@mnp 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 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_don_eff ,gr.codice_operatore_rec_eff ,gr.msisdn ,gr.codice_richiesta_recipient ; -- 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_notifica_credito , data_sbl_importo , t_iniziale , t_finale , processo , nome_file , nome_file_iniziale , nome_file_finale , donor_ospitato , rec_ospitato , msisdn , codice_richiesta_recipient , ack_iniziale , ack_finale , data_attesa_evento_fin , mese_comp_finale ) SELECT UNIQUE gr.id_richiesta , 'SLA Z' , MIN(sblImXml.data_eff) , gr.codice_operatore_don_eff , gr.codice_operatore_rec_eff , gr.data_cut_over_eff , MIN (fun_calcola_data (trasXml.nome_file, trasXml.data_eff)) -- data trasferimento credito , MIN (fun_calcola_data (sblImXml.nome_file, sblImXml.data_eff)) -- data sblocco importo , MIN (fun_calcola_data (trasAckIn.nome_file, trasXml.data_eff)) -- data estratta dell ack inviato al Recipient in risposta al trasferimento credito del donating , MIN (fun_calcola_data (sblImXml.nome_file, sblImXml.data_eff)) -- data estratta dal nome sblocco credito anomalo out , 'D' , MIN(sblImXml.nome_file) -- nome file della notifica credito , MIN(trasAckIn.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) , TO_DATE( SUBSTR( MIN(sblImXml.NOME_FILE), 5 , 14) ,'YYYYMMDDHH24MISS' ) , TO_CHAR ( TO_DATE( SUBSTR( MIN(sblImXml.NOME_FILE), 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') FROM mnp.mnp_xml_ack_in@mnp trasAckIn ,mnp.mnp_xml_richiesta_out@mnp rTras ,mnp.mnp_xml_out@mnp trasXml ,mnp.mnp_xml_out@mnp sblImXml ,mnp.mnp_xml_richiesta_out@mnp rSblIm ,mnp.mnp_xml_ack_in@mnp sblImAckIn ,mnp.mnp_gestione_richiesta@mnp gr WHERE trasXml.tipo_processo = 'D' AND trasXml.tipo_file = '10' AND sblImXml.tipo_processo = 'D' AND sblImXml.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 = rSblIm.id_richiesta AND rSblIm.nome_file = sblImXml.nome_file AND sblImAckIn.nome_file_riferito = sblImXml.nome_file 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_don_eff ,gr.codice_operatore_rec_eff ,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@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; / show err 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 , t_iniziale , t_finale , processo , nome_file , nome_file_iniziale , nome_file_finale , donor_ospitato , rec_ospitato , 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 (grVal.data_i_o) --tempo iniziale, data di validazione del porting , MIN (tcin.data_ricezione) -- tempo finale, data di notifica credito , 'R' , NULL , NULL , NULL , gr.codice_operatore_donating , gr.codice_operatore_recipient , gr.msisdn , NULL , NULL , NULL , MIN(grVal.data_i_o) , TO_CHAR(MIN(grVal.data_i_o),'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_effettivo , recipient_effettivo , dco_effettiva , data_notifica_credito , data_sbl_importo , t_iniziale , t_finale , processo , nome_file , nome_file_iniziale , nome_file_finale , donor_ospitato , rec_ospitato , 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) , MIN (tcinNtCr.data_ricezione) --tempo iniziale, data di notifica credito , MIN (tcinSblIm.data_ricezione) -- tempo finale, data di sblocco importo , 'R' , NULL , NULL , NULL , gr.codice_operatore_donating , gr.codice_operatore_recipient , gr.msisdn , NULL , NULL , NULL , MIN(grVal.data_i_o) , TO_CHAR(MIN(grVal.data_i_o),'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 = '02' 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; / show err 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 , t_iniziale , t_finale , processo , nome_file , nome_file_iniziale , nome_file_finale , donor_ospitato , rec_ospitato , 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 (grVal.data_i_o) --tempo iniziale, data di validazione del porting , MIN (tcin.data_ricezione) -- tempo finale, data di notifica credito , 'R' , NULL , NULL , NULL , gr.codice_operatore_donating , gr.codice_operatore_recipient , gr.msisdn , NULL , NULL , NULL , MIN(grVal.data_i_o) , TO_CHAR(MIN(grVal.data_i_o),'MM/YYYY') FROM mnp.mnp_mvno_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 gr.id_richiesta = grVal.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 credito anomalo INSERT INTO dwh.mnp_dw_sla_tc_out (id_richiesta , tipo_messaggio , data_messaggio , donor_effettivo , recipient_effettivo , dco_effettiva , data_notifica_credito , data_sbl_credito_anomalo , t_iniziale , t_finale , processo , nome_file , nome_file_iniziale , nome_file_finale , donor_ospitato , rec_ospitato , 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 , MIN (tcinNtCr.data_ricezione) --tempo iniziale, data di notifica Credito , MIN (tcinSblCr.data_ricezione) -- tempo finale, data di sblocco Credito Anomalo , 'R' , NULL , NULL , NULL , gr.codice_operatore_donating , gr.codice_operatore_recipient , gr.msisdn , NULL , NULL , NULL , MIN(grVal.data_i_o) , TO_CHAR(MIN(grVal.data_i_o),'MM/YYYY') FROM mnp.mnp_mvno_tc_in@MNP tcinNtCr ,mnp.mnp_mvno_tc_in@MNP tcinSblCr ,mnp.mnp_gest_rich_donor_virt@MNP gr ,mnp.mnp_storico_rich_don_virt@MNP grVal WHERE tcinNtCr.id_richiesta_dbc = gr.id_richiesta AND tcinSblCr.id_richiesta_dbc = gr.id_richiesta AND gr.id_richiesta = grVal.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 = '03' AND grVal.stato_a in (6,7) 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_effettivo , recipient_effettivo , dco_effettiva , data_notifica_credito , data_sbl_importo , t_iniziale , t_finale , processo , nome_file , nome_file_iniziale , nome_file_finale , donor_ospitato , rec_ospitato , 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 , MIN (tcinNtCr.data_ricezione) --tempo iniziale, data di notifica Credito , MIN (tcinSblIm.data_ricezione) -- tempo finale, data di sblocco Credito Anomalo , 'R' , NULL , NULL , NULL , gr.codice_operatore_donating , gr.codice_operatore_recipient , gr.msisdn , NULL , NULL , NULL , MIN(grVal.data_i_o) , TO_CHAR(MIN(grVal.data_i_o),'MM/YYYY') FROM mnp.mnp_mvno_tc_in@MNP tcinNtCr ,mnp.mnp_mvno_tc_in@MNP tcinSblIm ,mnp.mnp_gest_rich_donor_virt@MNP gr ,mnp.mnp_storico_rich_don_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)='DV' AND tcinNtCr.tipo_evento = '01' AND SUBSTR(tcinSblIm.id_richiesta_dbc,0,2)='DV' AND tcinSblIm.tipo_evento = '02' 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 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 , t_iniziale , t_finale , processo , nome_file , nome_file_iniziale , nome_file_finale , donor_ospitato , rec_ospitato , 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 (grVal.data_i_o) --tempo iniziale, data di validazione del porting , MIN (tcin.data_ricezione) -- tempo finale, data di notifica credito , 'V' , NULL , NULL , NULL , gr.codice_operatore_donating , gr.codice_operatore_recipient , gr.msisdn , NULL , NULL , NULL , MIN(grVal.data_i_o) , TO_CHAR(MIN(grVal.data_i_o),'MM/YYYY') FROM mnp.mnp_mvno_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 grVal.id_richiesta = gr.id_richiesta AND grVal.stato_a in (6,7) 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_effettivo , recipient_effettivo , dco_effettiva , data_notifica_credito , data_sbl_credito_anomalo , t_iniziale , t_finale , processo , nome_file , nome_file_iniziale , nome_file_finale , donor_ospitato , rec_ospitato , 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) , MIN (tcinNtCr.data_ricezione) --tempo iniziale, data di validazione del porting , MIN (tcinSblCr.data_ricezione) -- tempo finale, data di notifica credito , 'V' , NULL , NULL , NULL , gr.codice_operatore_donating , gr.codice_operatore_recipient , gr.msisdn , NULL , NULL , NULL , MIN(grVal.data_i_o) , TO_CHAR(MIN(grVal.data_i_o),'MM/YYYY') FROM mnp.mnp_mvno_tc_in@MNP tcinNtCr , mnp.mnp_mvno_tc_in@MNP tcinSblCr , 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 tcinSblCr.id_richiesta_dbc = gr.id_richiesta AND grVal.id_richiesta = gr.id_richiesta AND grVal.stato_a in (6,7) 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 = '03' 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_effettivo , recipient_effettivo , dco_effettiva , data_notifica_credito , data_sbl_importo , t_iniziale , t_finale , processo , nome_file , nome_file_iniziale , nome_file_finale , donor_ospitato , rec_ospitato , 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) , MIN (tcinNtCr.data_ricezione) --tempo iniziale, data di notifica Credito , MIN (tcinSblIm.data_ricezione) -- tempo finale, data di sblocco importo , 'V' , NULL , NULL , NULL , gr.codice_operatore_donating , gr.codice_operatore_recipient , gr.msisdn , NULL , NULL , NULL , MIN(grVal.data_i_o) , TO_CHAR(MIN(grVal.data_i_o),'MM/YYYY') FROM mnp.mnp_mvno_tc_in@MNP tcinNtCr , mnp.mnp_mvno_tc_in@MNP tcinSblIm , 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 grVal.id_richiesta = gr.id_richiesta AND grVal.stato_a in (6,7) 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 = '02' 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; / 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 , t_iniziale , t_finale , processo , nome_file , nome_file_iniziale , nome_file_finale , donor_ospitato , rec_ospitato , msisdn , codice_richiesta_recipient , ack_iniziale , ack_finale , data_attesa_evento_fin , mese_comp_finale ) 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,trasAckOut.data_inserimento)) -- data notifica credito , MIN(FUN_CALCOLA_DATA(espAckOut.nome_file,espAckOut.data_inserimento)) -- TI data Ack Espletamento del Donatin , MIN(FUN_CALCOLA_DATA(trasAckOut.nome_file,trasAckOut.data_inserimento)) -- TF data Ack in risposta alla notifica Credito , 'R' , MIN(trasXml.nome_file) , MIN(espAckOut.nome_file) , MIN(trasAckOut.nome_file) , gr.codice_operatore_don_eff , gr.codice_operatore_rec_eff , gr.msisdn , NULL , MIN(espAckOut.nome_file) , MIN(trasAckOut.nome_file) , TO_DATE( SUBSTR( MIN(trasAckOut.NOME_FILE), 5 , 14) ,'YYYYMMDDHH24MISS' ) , TO_CHAR ( TO_DATE( SUBSTR( MIN(trasAckOut.NOME_FILE), 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') FROM mnp.mnp_xml_ack_out@MNP trasAckOut , mnp.mnp_xml_ack_out@MNP espAckOut , mnp.mnp_xml_in@MNP trasXml , mnp.mnp_xml_in@MNP espXml , mnp.mnp_xml_richiesta_in@MNP rTrasIn , mnp.mnp_xml_richiesta_in@MNP rEspIn , mnp.mnp_gestione_richiesta_rec@MNP gr WHERE trasAckOut.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 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_effettivo , recipient_effettivo , dco_effettiva , data_notifica_credito , data_sbl_credito_anomalo , t_iniziale , t_finale , processo , nome_file , nome_file_iniziale , nome_file_finale , donor_ospitato , rec_ospitato , msisdn , codice_richiesta_recipient , ack_iniziale , ack_finale , data_attesa_evento_fin , mese_comp_finale ) 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,trasAckOut.data_inserimento)) -- data notifica credito , MIN(FUN_CALCOLA_DATA(sblCrAckOut.nome_file,sblCrAckOut.data_inserimento)) -- data sblocco credito anomalo , MIN(FUN_CALCOLA_DATA(trasAckOut.nome_file,trasAckOut.data_inserimento)) -- TI data Ack in risposta alla notifica Credito , MIN(FUN_CALCOLA_DATA(sblCrAckOut.nome_file,sblCrAckOut.data_inserimento)) -- TF data Ack in risposta allo sblocco Credito anomalo , 'R' , MIN(sblCrXml.nome_file) , MIN(trasAckOut.nome_file) , MIN(sblCrAckOut.nome_file) , gr.codice_operatore_don_eff , gr.codice_operatore_rec_eff , gr.msisdn , NULL , MIN(trasAckOut.nome_file) , MIN(sblCrAckOut.nome_file) , TO_DATE( SUBSTR( MIN(sblCrAckOut.NOME_FILE), 5 , 14) ,'YYYYMMDDHH24MISS' ) , TO_CHAR ( TO_DATE( SUBSTR( MIN(sblCrAckOut.NOME_FILE), 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') FROM mnp.mnp_xml_ack_out@MNP trasAckOut , mnp.mnp_xml_ack_out@MNP sblCrAckOut , mnp.mnp_xml_in@MNP trasXml , mnp.mnp_xml_in@MNP sblCrXml , mnp.mnp_xml_richiesta_in@MNP rTrasIn , mnp.mnp_xml_richiesta_in@MNP rSblCrIn , mnp.mnp_gestione_richiesta_rec@MNP gr WHERE trasAckOut.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_effettivo , recipient_effettivo , dco_effettiva , data_notifica_credito , data_sbl_importo , t_iniziale , t_finale , processo , nome_file , nome_file_iniziale , nome_file_finale , donor_ospitato , rec_ospitato , msisdn , codice_richiesta_recipient , ack_iniziale , ack_finale , data_attesa_evento_fin , mese_comp_finale ) 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,trasAckOut.data_inserimento)) -- data notifica credito , MIN(FUN_CALCOLA_DATA(sblImAckOut.nome_file,sblImAckOut.data_inserimento)) -- data sblocco credito anomalo , MIN(FUN_CALCOLA_DATA(trasAckOut.nome_file,trasAckOut.data_inserimento)) -- TI data Ack in risposta alla notifica Credito , MIN(FUN_CALCOLA_DATA(sblImAckOut.nome_file,sblImAckOut.data_inserimento)) -- TF data Ack in risposta allo sblocco Credito anomalo , 'R' , MIN(sblImXml.nome_file) , MIN(trasAckOut.nome_file) , MIN(sblImAckOut.nome_file) , gr.codice_operatore_don_eff , gr.codice_operatore_rec_eff , gr.msisdn , NULL , MIN(trasAckOut.nome_file) , MIN(sblImAckOut.nome_file) , TO_DATE( SUBSTR( MIN(sblImAckOut.NOME_FILE), 5 , 14) ,'YYYYMMDDHH24MISS' ) , TO_CHAR ( TO_DATE( SUBSTR( MIN(sblImAckOut.NOME_FILE), 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') FROM mnp.mnp_xml_ack_out@MNP trasAckOut , mnp.mnp_xml_ack_out@MNP sblImAckOut , mnp.mnp_xml_in@MNP trasXml , mnp.mnp_xml_in@MNP sblImXml , mnp.mnp_xml_richiesta_in@MNP rTrasIn , mnp.mnp_xml_richiesta_in@MNP rSblImIn , mnp.mnp_gestione_richiesta_rec@MNP gr WHERE trasAckOut.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@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 , t_iniziale , t_finale , processo , nome_file , nome_file_iniziale , nome_file_finale , donor_ospitato , rec_ospitato , 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 (grVal.data_i_o) --tempo iniziale, data di validazione del porting , MIN (tcin.data_ricezione) -- tempo finale, data di notifica credito , 'D' , NULL , NULL , NULL , gr.codice_operatore_donating , gr.codice_operatore_recipient , gr.msisdn , NULL , NULL , NULL , MIN(grVal.data_i_o) , TO_CHAR(MIN(grVal.data_i_o),'MM/YYYY') 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_effettivo , recipient_effettivo , dco_effettiva , data_notifica_credito , data_sbl_importo , t_iniziale , t_finale , processo , nome_file , nome_file_iniziale , nome_file_finale , donor_ospitato , rec_ospitato , 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) , MIN (tcinNtCr.data_ricezione) --tempo iniziale, data di notifica cretito , MIN (tcinSblIm.data_ricezione) -- tempo finale, data di sblocco importo , 'D' , NULL , NULL , NULL , gr.codice_operatore_donating , gr.codice_operatore_recipient , gr.msisdn , NULL , NULL , NULL , MIN(grVal.data_i_o) , TO_CHAR(MIN(grVal.data_i_o),'MM/YYYY') 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 = '02' 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; / 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 , t_iniziale , t_finale , processo , nome_file , nome_file_iniziale , nome_file_finale , donor_ospitato , rec_ospitato , 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 (grVal.data_i_o) --tempo iniziale, data di validazione del porting , MIN (tcin.data_ricezione) -- tempo finale, data di notifica credito , 'D' , NULL , NULL , NULL , gr.codice_operatore_donating , gr.codice_operatore_recipient , gr.msisdn , NULL , NULL , NULL , MIN(grVal.data_i_o) , TO_CHAR(MIN(grVal.data_i_o),'MM/YYYY') 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 = 0 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_effettivo , recipient_effettivo , dco_effettiva , data_notifica_credito , data_sbl_importo , t_iniziale , t_finale , processo , nome_file , nome_file_iniziale , nome_file_finale , donor_ospitato , rec_ospitato , 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) , MIN (tcinNtCr.data_ricezione) --tempo iniziale, data di notifica cretito , MIN (tcinSblIm.data_ricezione) -- tempo finale, data di sblocco importo , 'D' , NULL , NULL , NULL , gr.codice_operatore_donating , gr.codice_operatore_recipient , gr.msisdn , NULL , NULL , NULL , MIN(grVal.data_i_o) , TO_CHAR(MIN(grVal.data_i_o),'MM/YYYY') 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 = '02' AND gr.flag_esp = 0 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_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 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'); 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'); 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_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" (dataRif IN DATE) AS mese_in NUMBER; anno_in NUMBER; data_in DATE; data_iniziale DATE; cod_errore NUMBER; 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'); 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')=anno_in||mese_in; 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 -- calcolo i giorni di ritardo per lo SLAX UPDATE dwh.mnp_dw_sla_tc_out SET numero_giorni_ritardo = FUN_GIORNI_LAVORATIVI(trunc(t_finale) , trunc(t_iniziale)) - 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 = FUN_GIORNI_LAVORATIVI(trunc(t_finale) , trunc(t_iniziale)) - 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 = FUN_GIORNI_LAVORATIVI(trunc(t_finale) , trunc(t_iniziale)) - 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; /