CREATE OR REPLACE PACKAGE PKG_CALCOLO_SLA_FRANCHIGIA AS /****************************************************************************** NAME: PKG_CALCOLO_SLA_FRANCHIGIA PURPOSE: REVISIONS: Ver Date Author Description --------- ---------- --------------- ------------------------------------ 1.0 11/02/2011 1. Created this package. ******************************************************************************/ PROCEDURE CALCOLO_SLA0_RECIPIENT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CALCOLO_SLA1_RECIPIENT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CALCOLO_SLA2_RECIPIENT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CALCOLO_SLA3_RECIPIENT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CALCOLO_SLA0_DONOR (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CALCOLO_SLA1_DONOR (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CALCOLO_SLA2_DONOR (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CALCOLO_SLA3_DONOR (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CALCOLO_SLA1_DONOR_VIRT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CALCOLO_SLA2_DONOR_VIRT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CALCOLO_SLA3_DONOR_VIRT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CALCOLO_SLA1_REC_VIRT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CALCOLO_SLA2_REC_VIRT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CALCOLO_SLA3_REC_VIRT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CALCOLO_SLA_FRANCHIGIA(dataRif IN DATE); END PKG_CALCOLO_SLA_FRANCHIGIA; / CREATE OR REPLACE package body PKG_CALCOLO_SLA_FRANCHIGIA as procedure CALCOLO_SLA0_RECIPIENT(dataRif IN DATE,cod_errore OUT NUMBER) IS temp_data_in_att DATE; temp_data_fin_att DATE; temp_data_in_pic DATE; temp_data_fin_pic DATE; ora_fin_ftemp1 CHAR(2); min_fin_ftemp1 CHAR(2); sec_fin_ftemp1 CHAR(2); ora_fin_ftempH CHAR(2); min_fin_ftempH CHAR(2); sec_fin_ftempH CHAR(2); ora_fin_ftemp2 CHAR(2); min_fin_ftemp2 CHAR(2); sec_fin_ftemp2 CHAR(2); mese_comp CHAR(7); n_rec integer := 0; proc_name constant varchar2(30) := 'CALCOLO_SLA0_RECIPIENT'; D_ini DATE; D_fine DATE; eventi NUMBER; CURSOR eventi_attesi is SELECT COUNT(*) AS eventiAttesi ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , a.CODICE_OPERATORE_DONATING as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta_rec a ,mnp.mnp_xml_richiesta_out rich_out ,mnp.mnp_xml_out xml_out ,mnp.mnp_xml_ack_in ack_in WHERE a.codice_operatore_rec_eff = 'TIMG' AND xml_out.tipo_file = 1 AND rich_out.id_richiesta = a.id_richiesta AND xml_out.nome_file = rich_out.nome_file AND ack_in.nome_file_riferito = rich_out.nome_file AND (a.richiestaAdHocAom = 0 and a.richiestaAdHoc = 0 ) AND to_date( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_att AND temp_data_fin_att GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; CURSOR eventi_attesi_hoc is SELECT COUNT(*) AS eventiAttesi ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , a.CODICE_OPERATORE_DONATING as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta_rec a ,mnp.mnp_xml_richiesta_out rich_out ,mnp.mnp_xml_out xml_out ,mnp.mnp_xml_ack_in ack_in WHERE a.codice_operatore_rec_eff = 'TIMG' AND xml_out.tipo_file = 9 AND rich_out.id_richiesta = a.id_richiesta AND xml_out.nome_file = rich_out.nome_file AND ack_in.nome_file_riferito = rich_out.nome_file AND (a.richiestaAdHocAom > 0 or a.richiestaAdHoc > 0 ) AND to_date( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_att AND temp_data_fin_att GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; CURSOR eventi_in_sla is SELECT COUNT(*) AS eventiSLA ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , a.CODICE_OPERATORE_DONATING as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta_rec a ,mnp.mnp_xml_richiesta_out rich_out ,mnp.mnp_xml_out xml_out ,mnp.mnp_xml_ack_in ack_in_att ,mnp.mnp_xml_in xml_in ,mnp.mnp_xml_richiesta_in rich_in ,mnp.mnp_xml_ack_out ack_out_pic WHERE a.codice_operatore_rec_eff = 'TIMG' AND xml_out.tipo_file = 1 AND rich_out.id_richiesta = a.id_richiesta AND ack_in_att.nome_file_riferito = rich_out.nome_file AND xml_out.nome_file = rich_out.nome_file AND xml_in.tipo_file = 5 AND rich_in.id_richiesta = rich_out.id_richiesta AND xml_in.nome_file = rich_in.nome_file AND ack_out_pic.nome_file_riferito = rich_in.nome_file AND (a.richiestaAdHocAom = 0 and a.richiestaAdHoc = 0 ) AND to_date( SUBSTR( ack_in_att.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_att AND temp_data_fin_att AND to_date( SUBSTR( ack_out_pic.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_pic AND temp_data_fin_pic GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; CURSOR eventi_in_sla_hoc is SELECT COUNT(*) AS eventiSLA ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , a.CODICE_OPERATORE_DONATING as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta_rec a ,mnp.mnp_xml_richiesta_out rich_out ,mnp.mnp_xml_out xml_out ,mnp.mnp_xml_ack_in ack_in_att ,mnp.mnp_xml_in xml_in ,mnp.mnp_xml_richiesta_in rich_in ,mnp.mnp_xml_ack_out ack_out_pic WHERE a.codice_operatore_rec_eff = 'TIMG' AND xml_in.tipo_file = 9 AND rich_out.id_richiesta = a.id_richiesta AND ack_in_att.nome_file_riferito = rich_out.nome_file AND xml_out.nome_file = rich_out.nome_file AND xml_in.tipo_file = 5 AND rich_in.id_richiesta = rich_out.id_richiesta AND xml_in.nome_file = rich_in.nome_file AND ack_out_pic.nome_file_riferito = rich_in.nome_file AND (a.richiestaAdHocAom > 0 or a.richiestaAdHoc > 0 ) AND to_date( SUBSTR( ack_in_att.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_att AND temp_data_fin_att AND to_date( SUBSTR( ack_out_pic.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_pic AND temp_data_fin_pic GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; BEGIN cod_errore := 0; ora_fin_ftemp1 := null; min_fin_ftemp1 := null; sec_fin_ftemp1 := null; ora_fin_ftemp2 := null; min_fin_ftemp2 := null; sec_fin_ftemp2 := null; ora_fin_ftempH := null; min_fin_ftempH := null; sec_fin_ftempH := null; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); /*il mese di competenza viene impostato sull'evento finale*/ mese_comp:= TO_CHAR (dwh.FUN_GIORNI_MENO (dataRif,1),'mm/yyyy'); SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp1,min_fin_ftemp1,sec_fin_ftemp1 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 1; -- RICAVA FINESTRE TEMPORALI PER TIPO FILE 9 ATTIVAZIONE P.HOC SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftempH,min_fin_ftempH,sec_fin_ftempH FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 9; -- per pic presa dal nome file out non sono previsti i 15 minuti SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 5; --carico gli eventi attesi per std/MVNO --calcolo l'intervallo di 24h dalla chiusura finestra del giorno precedente, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_att:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),2); temp_data_fin_att:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),1); FOR rec IN eventi_attesi LOOP n_rec := n_rec +1; INSERT INTO MNP_DW_SLA_FRANCHIGIA_OUT ( TIPO_EVENTO, DATA_EVENTO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DONOR_RETE, RECIPIENT_RETE, EVENTI_ATTESI, PROCESSO,MESE_COMP_FINALE) VALUES ( 'SLA0' ,trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donatingRete ,rec.recipientRete ,rec.eventiAttesi ,'R' ,mese_comp ); END LOOP; --carico gli eventi attesi per pHOC --calcolo l'intervallo di 24h dalla chiusura finestra del giorno precedente, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_att:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftempH ||min_fin_ftempH||sec_fin_ftempH),'YYYYMMDDHH24MISS'),2); temp_data_fin_att:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftempH ||min_fin_ftempH||sec_fin_ftempH),'YYYYMMDDHH24MISS'),1); FOR rec IN eventi_attesi_hoc LOOP BEGIN n_rec := n_rec +1; INSERT INTO MNP_DW_SLA_FRANCHIGIA_OUT ( TIPO_EVENTO, DATA_EVENTO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DONOR_RETE, RECIPIENT_RETE, EVENTI_ATTESI, PROCESSO, MESE_COMP_FINALE) VALUES ( 'SLA0' ,trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donatingRete ,rec.recipientRete ,rec.eventiAttesi ,'R' ,mese_comp ); EXCEPTION -- potrebbe essere già presente un record per progetti std/mvno. In questo caso devo sommare WHEN dup_val_on_index THEN BEGIN -- lettura dati preesistenti SELECT EVENTI_ATTESI INTO eventi FROM MNP_DW_SLA_FRANCHIGIA_OUT WHERE TIPO_EVENTO = 'SLA0' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; eventi:= eventi + rec.eventiAttesi; UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_ATTESI = eventi WHERE TIPO_EVENTO = 'SLA0' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END; END; END LOOP; --aggiorno gli eventi in SLA per std/MVNO --calcolo l'intervallo di pic da inizio giornata, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_pic:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||'00' ||'00'||'01'),'YYYYMMDDHH24MISS'),1); temp_data_fin_pic:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS'),1); FOR rec IN eventi_in_SLA LOOP UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_IN_SLA = rec.eventiSLA WHERE TIPO_EVENTO = 'SLA0' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END LOOP; FOR rec IN eventi_in_SLA_hoc LOOP UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_IN_SLA = EVENTI_IN_SLA + rec.eventiSLA WHERE TIPO_EVENTO = 'SLA0' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC); EXCEPTION WHEN OTHERS THEN if eventi_attesi%ISOPEN then CLOSE eventi_attesi; end if; if eventi_attesi_hoc%ISOPEN then CLOSE eventi_attesi_hoc; end if; if eventi_in_sla%ISOPEN then CLOSE eventi_in_sla; end if; if eventi_in_sla_hoc%ISOPEN then CLOSE eventi_in_sla_hoc; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CALCOLO_SLA0_RECIPIENT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CALCOLO_SLA0_RECIPIENT; procedure CALCOLO_SLA1_RECIPIENT(dataRif IN DATE,cod_errore OUT NUMBER) IS temp_data_in_att DATE; temp_data_fin_att DATE; temp_data_in_val DATE; temp_data_fin_val DATE; ora_fin_ftemp1 CHAR(2); min_fin_ftemp1 CHAR(2); sec_fin_ftemp1 CHAR(2); ora_fin_ftempH CHAR(2); min_fin_ftempH CHAR(2); sec_fin_ftempH CHAR(2); ora_fin_ftemp2 CHAR(2); min_fin_ftemp2 CHAR(2); sec_fin_ftemp2 CHAR(2); mese_comp CHAR(7); n_rec integer := 0; proc_name constant varchar2(30) := 'CALCOLO_SLA1_RECIPIENT'; D_ini DATE; D_fine DATE; eventi NUMBER; CURSOR eventi_attesi is SELECT COUNT(*) AS eventiAttesi ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , a.CODICE_OPERATORE_DONATING as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta_rec a ,mnp.mnp_xml_richiesta_out rich_out ,mnp.mnp_xml_out xml_out ,mnp.mnp_xml_ack_in ack_in WHERE a.codice_operatore_rec_eff = 'TIMG' AND xml_out.tipo_file = 1 AND rich_out.id_richiesta = a.id_richiesta AND xml_out.nome_file = rich_out.nome_file AND ack_in.nome_file_riferito = rich_out.nome_file AND (a.richiestaAdHocAom = 0 and a.richiestaAdHoc = 0 ) AND a.stato NOT IN (5,9) AND to_date( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_att AND temp_data_fin_att GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; CURSOR eventi_attesi_hoc is SELECT COUNT(*) AS eventiAttesi ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , a.CODICE_OPERATORE_DONATING as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta_rec a ,mnp.mnp_xml_richiesta_out rich_out ,mnp.mnp_xml_out xml_out ,mnp.mnp_xml_ack_in ack_in WHERE a.codice_operatore_rec_eff = 'TIMG' AND xml_out.tipo_file = 9 AND rich_out.id_richiesta = a.id_richiesta AND xml_out.nome_file = rich_out.nome_file AND ack_in.nome_file_riferito = rich_out.nome_file AND (a.richiestaAdHocAom > 0 or a.richiestaAdHoc > 0 ) AND a.stato NOT IN (5,9) AND to_date( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_att AND temp_data_fin_att GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; CURSOR eventi_in_sla is SELECT COUNT(*) AS eventiSLA ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , a.CODICE_OPERATORE_DONATING as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta_rec a ,mnp.mnp_xml_richiesta_out rich_out ,mnp.mnp_xml_out xml_out ,mnp.mnp_xml_ack_in ack_in_att ,mnp.mnp_xml_in xml_in ,mnp.mnp_xml_richiesta_in rich_in ,mnp.mnp_xml_ack_out ack_out_val WHERE a.codice_operatore_rec_eff = 'TIMG' AND xml_out.tipo_file = 1 AND rich_out.id_richiesta = a.id_richiesta AND ack_in_att.nome_file_riferito = rich_out.nome_file AND xml_out.nome_file = rich_out.nome_file AND xml_in.tipo_file = 2 AND rich_in.id_richiesta = rich_out.id_richiesta AND xml_in.nome_file = rich_in.nome_file AND ack_out_val.nome_file_riferito = rich_in.nome_file AND (a.richiestaAdHocAom = 0 and a.richiestaAdHoc = 0 ) AND to_date( SUBSTR( ack_in_att.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_att AND temp_data_fin_att AND to_date( SUBSTR( ack_out_val.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_val AND temp_data_fin_val GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; CURSOR eventi_in_sla_hoc is SELECT COUNT(*) AS eventiSLA ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , a.CODICE_OPERATORE_DONATING as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta_rec a ,mnp.mnp_xml_richiesta_out rich_out ,mnp.mnp_xml_out xml_out ,mnp.mnp_xml_ack_in ack_in_att ,mnp.mnp_xml_in xml_in ,mnp.mnp_xml_richiesta_in rich_in ,mnp.mnp_xml_ack_out ack_out_val WHERE a.codice_operatore_rec_eff = 'TIMG' AND xml_out.tipo_file = 9 AND rich_out.id_richiesta = a.id_richiesta AND ack_in_att.nome_file_riferito = rich_out.nome_file AND xml_out.nome_file = rich_out.nome_file AND xml_in.tipo_file = 2 AND rich_in.id_richiesta = rich_out.id_richiesta AND xml_in.nome_file = rich_in.nome_file AND ack_out_val.nome_file_riferito = rich_in.nome_file AND (a.richiestaAdHocAom > 0 or a.richiestaAdHoc > 0 ) AND to_date( SUBSTR( ack_in_att.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_att AND temp_data_fin_att AND to_date( SUBSTR( ack_out_val.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_val AND temp_data_fin_val AND ack_out_val.NOME_FILE = (select min(X.NOME_FILE) FROM mnp.MNP_XML_IN x, mnp.MNP_XML_RICHIESTA_IN y WHERE y.ID_RICHIESTA= rich_in.ID_RICHIESTA AND x.TIPO_FILE=2 --validazione AND y.NOME_FILE = x.NOME_FILE ) GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; BEGIN cod_errore := 0; ora_fin_ftemp1 := null; min_fin_ftemp1 := null; sec_fin_ftemp1 := null; ora_fin_ftemp2 := null; min_fin_ftemp2 := null; sec_fin_ftemp2 := null; ora_fin_ftempH := null; min_fin_ftempH := null; sec_fin_ftempH := null; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); /*il mese di competenza viene impostato sull'evento finale*/ mese_comp:= TO_CHAR (dwh.FUN_GIORNI_MENO (dataRif,1),'mm/yyyy'); SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp1,min_fin_ftemp1,sec_fin_ftemp1 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 1; -- RICAVA FINESTRE TEMPORALI PER TIPO FILE 9 ATTIVAZIONE P.HOC SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftempH,min_fin_ftempH,sec_fin_ftempH FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 9; -- per pic presa dal nome file out non sono previsti i 15 minuti SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 2 AND TIPO_OPERATORE = 'AOM'; --carico gli eventi attesi per std/MVNO --calcolo l'intervallo di 24h dalla chiusura finestra del giorno precedente, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_att:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),3); temp_data_fin_att:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),2); FOR rec IN eventi_attesi LOOP n_rec := n_rec +1; INSERT INTO MNP_DW_SLA_FRANCHIGIA_OUT ( TIPO_EVENTO, DATA_EVENTO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DONOR_RETE, RECIPIENT_RETE, EVENTI_ATTESI, PROCESSO,MESE_COMP_FINALE) VALUES ( 'SLA1' ,trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donatingRete ,rec.recipientRete ,rec.eventiAttesi ,'R' ,mese_comp ); END LOOP; --carico gli eventi attesi per pHOC --calcolo l'intervallo di 24h dalla chiusura finestra del giorno precedente, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_att:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftempH ||min_fin_ftempH||sec_fin_ftempH),'YYYYMMDDHH24MISS'),3); temp_data_fin_att:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftempH ||min_fin_ftempH||sec_fin_ftempH),'YYYYMMDDHH24MISS'),2); FOR rec IN eventi_attesi_hoc LOOP BEGIN n_rec := n_rec +1; INSERT INTO MNP_DW_SLA_FRANCHIGIA_OUT ( TIPO_EVENTO, DATA_EVENTO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DONOR_RETE, RECIPIENT_RETE, EVENTI_ATTESI, PROCESSO, MESE_COMP_FINALE) VALUES ( 'SLA1' ,trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donatingRete ,rec.recipientRete ,rec.eventiAttesi ,'R' ,mese_comp ); EXCEPTION -- potrebbe essere già presente un record per progetti std/mvno. In questo caso devo sommare WHEN dup_val_on_index THEN BEGIN -- lettura dati preesistenti SELECT EVENTI_ATTESI INTO eventi FROM MNP_DW_SLA_FRANCHIGIA_OUT WHERE TIPO_EVENTO = 'SLA1' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; eventi:= eventi + rec.eventiAttesi; UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_ATTESI = eventi WHERE TIPO_EVENTO = 'SLA1' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END; END; END LOOP; --aggiorno gli eventi in SLA per std/MVNO --calcolo l'intervallo di pic da inizio giornata, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_val:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||'00' ||'00'||'01'),'YYYYMMDDHH24MISS'),1); temp_data_fin_val:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS'),1); FOR rec IN eventi_in_SLA LOOP UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_IN_SLA = rec.eventiSLA WHERE TIPO_EVENTO = 'SLA1' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END LOOP; FOR rec IN eventi_in_SLA_hoc LOOP UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_IN_SLA = EVENTI_IN_SLA + rec.eventiSLA WHERE TIPO_EVENTO = 'SLA1' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC); EXCEPTION WHEN OTHERS THEN if eventi_attesi%ISOPEN then CLOSE eventi_attesi; end if; if eventi_attesi_hoc%ISOPEN then CLOSE eventi_attesi_hoc; end if; if eventi_in_sla%ISOPEN then CLOSE eventi_in_sla; end if; if eventi_in_sla_hoc%ISOPEN then CLOSE eventi_in_sla_hoc; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CALCOLO_SLA1_RECIPIENT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CALCOLO_SLA1_RECIPIENT; procedure CALCOLO_SLA2_RECIPIENT(dataRif IN DATE,cod_errore OUT NUMBER) IS temp_data_in_esp DATE; temp_data_fin_esp DATE; temp_data_in_val DATE; temp_data_fin_val DATE; ora_fin_ftemp1 CHAR(2); min_fin_ftemp1 CHAR(2); sec_fin_ftemp1 CHAR(2); ora_fin_ftemp2 CHAR(2); min_fin_ftemp2 CHAR(2); sec_fin_ftemp2 CHAR(2); mese_comp CHAR(7); n_rec integer := 0; proc_name constant varchar2(30) := 'CALCOLO_SLA2_RECIPIENT'; D_ini DATE; D_fine DATE; eventi NUMBER; CURSOR eventi_attesi is SELECT COUNT(*) AS eventiAttesi ,a.CODICE_OPERATORE_RECIPIENT as recipientRete ,a.CODICE_OPERATORE_DONATING as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta_rec a ,mnp.mnp_xml_richiesta_in rich_in ,mnp.mnp_xml_in xml_in ,mnp.mnp_xml_ack_out ack_out WHERE a.codice_operatore_rec_eff = 'TIMG' AND xml_in.tipo_file = 2 AND rich_in.id_richiesta = a.id_richiesta AND xml_in.nome_file = rich_in.nome_file AND ack_out.nome_file_riferito = rich_in.nome_file AND (a.richiestaAdHocAom = 0 and a.richiestaAdHoc = 0 ) AND a.stato <> 7 AND to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_val AND temp_data_fin_val GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; CURSOR eventi_attesi_hoc is SELECT COUNT(*) AS eventiAttesi ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , a.CODICE_OPERATORE_DONATING as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta_rec a ,mnp.mnp_xml_richiesta_in rich_in ,mnp.mnp_xml_in xml_in ,mnp.mnp_xml_ack_out ack_out WHERE a.codice_operatore_rec_eff = 'TIMG' AND xml_in.tipo_file = 2 AND rich_in.id_richiesta = a.id_richiesta AND xml_in.nome_file = rich_in.nome_file AND ack_out.nome_file_riferito = rich_in.nome_file AND (a.richiestaAdHocAom > 0 or a.richiestaAdHoc > 0 ) AND a.stato <> 7 AND to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_val AND temp_data_fin_val GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; CURSOR eventi_in_sla is SELECT COUNT(*) AS eventiSLA ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , a.CODICE_OPERATORE_DONATING as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta_rec a ,mnp.mnp_xml_in xml_in_esp ,mnp.mnp_xml_richiesta_in rich_in_esp ,mnp.mnp_xml_ack_out ack_out_esp ,mnp.mnp_xml_in xml_in_val ,mnp.mnp_xml_richiesta_in rich_in_val ,mnp.mnp_xml_ack_out ack_out_val WHERE a.codice_operatore_rec_eff = 'TIMG' AND xml_in_esp.tipo_file = 6 AND rich_in_esp.id_richiesta = a.id_richiesta AND ack_out_esp.nome_file_riferito = rich_in_esp.nome_file AND xml_in_esp.nome_file = rich_in_esp.nome_file AND xml_in_val.tipo_file = 2 AND rich_in_val.id_richiesta = rich_in_esp.id_richiesta AND xml_in_val.nome_file = rich_in_val.nome_file AND ack_out_val.nome_file_riferito = rich_in_val.nome_file AND (a.richiestaAdHocAom = 0 and a.richiestaAdHoc = 0 ) AND a.CODICE_OPERATORE_DONATING= xml_in_esp.MITTENTE AND to_date( SUBSTR( ack_out_val.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_val AND temp_data_fin_val AND to_date( SUBSTR( ack_out_esp.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_esp AND temp_data_fin_esp GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; CURSOR eventi_in_sla_hoc is SELECT COUNT(*) AS eventiSLA ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , a.CODICE_OPERATORE_DONATING as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta_rec a ,mnp.mnp_xml_in xml_in_esp ,mnp.mnp_xml_richiesta_in rich_in_esp ,mnp.mnp_xml_ack_out ack_out_esp ,mnp.mnp_xml_in xml_in_val ,mnp.mnp_xml_richiesta_in rich_in_val ,mnp.mnp_xml_ack_out ack_out_val WHERE a.codice_operatore_rec_eff = 'TIMG' AND xml_in_esp.tipo_file = 6 AND rich_in_esp.id_richiesta = a.id_richiesta AND ack_out_esp.nome_file_riferito = rich_in_esp.nome_file AND xml_in_esp.nome_file = rich_in_esp.nome_file AND xml_in_val.tipo_file = 2 AND rich_in_val.id_richiesta = rich_in_esp.id_richiesta AND xml_in_val.nome_file = rich_in_val.nome_file AND ack_out_val.nome_file_riferito = rich_in_val.nome_file AND (a.richiestaAdHocAom > 0 or a.richiestaAdHoc > 0 ) AND a.CODICE_OPERATORE_DONATING= xml_in_esp.MITTENTE AND to_date( SUBSTR( ack_out_val.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_val AND temp_data_fin_val AND to_date( SUBSTR( ack_out_esp.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_esp AND temp_data_fin_esp AND ack_out_val.NOME_FILE = (select max(X.NOME_FILE) FROM mnp.MNP_XML_IN x, mnp.MNP_XML_RICHIESTA_IN y WHERE y.ID_RICHIESTA= rich_in_val.ID_RICHIESTA AND x.TIPO_FILE=2 --validazione AND y.NOME_FILE = x.NOME_FILE ) GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; BEGIN cod_errore := 0; ora_fin_ftemp1 := null; min_fin_ftemp1 := null; sec_fin_ftemp1 := null; ora_fin_ftemp2 := null; min_fin_ftemp2 := null; sec_fin_ftemp2 := null; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); /*il mese di competenza viene impostato sull'evento finale*/ mese_comp:= TO_CHAR (dwh.FUN_GIORNI_MENO (dataRif,1),'mm/yyyy'); SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp1,min_fin_ftemp1,sec_fin_ftemp1 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 2 AND TIPO_OPERATORE= 'AOM'; -- per pic presa dal nome file out non sono previsti i 15 minuti SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 6; --carico gli eventi attesi per std/MVNO --calcolo l'intervallo di 24h dalla chiusura finestra del giorno precedente, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_val:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),4); temp_data_fin_val:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),3); FOR rec IN eventi_attesi LOOP n_rec := n_rec +1; INSERT INTO MNP_DW_SLA_FRANCHIGIA_OUT ( TIPO_EVENTO, DATA_EVENTO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DONOR_RETE, RECIPIENT_RETE, EVENTI_ATTESI, PROCESSO,MESE_COMP_FINALE) VALUES ( 'SLA2' ,trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donatingRete ,rec.recipientRete ,rec.eventiAttesi ,'R' ,mese_comp ); END LOOP; --carico gli eventi attesi per pHOC FOR rec IN eventi_attesi_hoc LOOP BEGIN n_rec := n_rec +1; INSERT INTO MNP_DW_SLA_FRANCHIGIA_OUT ( TIPO_EVENTO, DATA_EVENTO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DONOR_RETE, RECIPIENT_RETE, EVENTI_ATTESI, PROCESSO, MESE_COMP_FINALE) VALUES ( 'SLA2' ,trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donatingRete ,rec.recipientRete ,rec.eventiAttesi ,'R' ,mese_comp ); EXCEPTION -- potrebbe essere già presente un record per progetti std/mvno. In questo caso devo sommare WHEN dup_val_on_index THEN BEGIN -- lettura dati preesistenti SELECT EVENTI_ATTESI INTO eventi FROM MNP_DW_SLA_FRANCHIGIA_OUT WHERE TIPO_EVENTO = 'SLA2' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; eventi:= eventi + rec.eventiAttesi; UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_ATTESI = eventi WHERE TIPO_EVENTO = 'SLA2' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END; END; END LOOP; --aggiorno gli eventi in SLA per std/MVNO --calcolo l'intervallo di pic da inizio giornata, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_esp:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||'00' ||'00'||'01'),'YYYYMMDDHH24MISS'),1); temp_data_fin_esp:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS'),1); FOR rec IN eventi_in_SLA LOOP UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_IN_SLA = rec.eventiSLA WHERE TIPO_EVENTO = 'SLA2' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END LOOP; FOR rec IN eventi_in_SLA_hoc LOOP UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_IN_SLA = EVENTI_IN_SLA + rec.eventiSLA WHERE TIPO_EVENTO = 'SLA2' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC); EXCEPTION WHEN OTHERS THEN if eventi_attesi%ISOPEN then CLOSE eventi_attesi; end if; if eventi_attesi_hoc%ISOPEN then CLOSE eventi_attesi_hoc; end if; if eventi_in_sla%ISOPEN then CLOSE eventi_in_sla; end if; if eventi_in_sla_hoc%ISOPEN then CLOSE eventi_in_sla_hoc; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CALCOLO_SLA2_RECIPIENT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CALCOLO_SLA2_RECIPIENT; procedure CALCOLO_SLA3_RECIPIENT(dataRif IN DATE,cod_errore OUT NUMBER) IS temp_data_in_esp DATE; temp_data_fin_esp DATE; temp_data_in_por DATE; temp_data_fin_por DATE; ora_fin_ftemp1 CHAR(2); min_fin_ftemp1 CHAR(2); sec_fin_ftemp1 CHAR(2); ora_fin_ftemp2 CHAR(2); min_fin_ftemp2 CHAR(2); sec_fin_ftemp2 CHAR(2); mese_comp CHAR(7); n_rec integer := 0; proc_name constant varchar2(30) := 'CALCOLO_SLA3_RECIPIENT'; D_ini DATE; D_fine DATE; eventi NUMBER; CURSOR eventi_attesi is SELECT COUNT(*) AS eventiAttesi ,a.CODICE_OPERATORE_RECIPIENT as recipientRete ,xml_out.destinatario as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta_rec a ,mnp.mnp_xml_richiesta_out rich_out ,mnp.mnp_xml_out xml_out ,mnp.mnp_xml_ack_in ack_in WHERE a.codice_operatore_rec_eff = 'TIMG' AND xml_out.tipo_file = 3 AND rich_out.id_richiesta = a.id_richiesta AND xml_out.nome_file = rich_out.nome_file AND ack_in.nome_file_riferito = rich_out.nome_file AND xml_out.destinatario <> a.codice_operatore_donating AND xml_out.destinatario <> 'NPTS' AND to_date( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_por AND temp_data_fin_por GROUP BY a.CODICE_OPERATORE_RECIPIENT, xml_out.destinatario,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; CURSOR eventi_in_sla is SELECT COUNT(*) AS eventiSLA ,a.CODICE_OPERATORE_RECIPIENT as recipientRete ,xml_out_por.destinatario as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta_rec a ,mnp.mnp_xml_in xml_in_esp ,mnp.mnp_xml_richiesta_in rich_in_esp ,mnp.mnp_xml_ack_out ack_out_esp ,mnp.mnp_xml_out xml_out_por ,mnp.mnp_xml_richiesta_out rich_out_por ,mnp.mnp_xml_ack_in ack_in_por WHERE a.codice_operatore_rec_eff = 'TIMG' AND xml_in_esp.tipo_file = 6 AND rich_in_esp.id_richiesta = a.id_richiesta AND ack_out_esp.nome_file_riferito = rich_in_esp.nome_file AND xml_in_esp.nome_file = rich_in_esp.nome_file AND xml_out_por.tipo_file = 3 AND rich_out_por.id_richiesta = rich_in_esp.id_richiesta AND xml_out_por.nome_file = rich_out_por.nome_file AND ack_in_por.nome_file_riferito = rich_out_por.nome_file AND xml_out_por.destinatario= xml_in_esp.MITTENTE AND xml_in_esp.mittente <> a.codice_operatore_donating AND xml_in_esp.mittente <> 'NPTS' AND to_date( SUBSTR( ack_in_por.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_por AND temp_data_fin_por AND to_date( SUBSTR( ack_out_esp.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_esp AND temp_data_fin_esp GROUP BY a.CODICE_OPERATORE_RECIPIENT, xml_out_por.destinatario,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; BEGIN cod_errore := 0; ora_fin_ftemp1 := null; min_fin_ftemp1 := null; sec_fin_ftemp1 := null; ora_fin_ftemp2 := null; min_fin_ftemp2 := null; sec_fin_ftemp2 := null; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); /*il mese di competenza viene impostato sull'evento finale*/ mese_comp:= TO_CHAR (dwh.FUN_GIORNI_MENO (dataRif,1),'mm/yyyy'); SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp1,min_fin_ftemp1,sec_fin_ftemp1 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 3; -- per pic presa dal nome file out non sono previsti i 15 minuti SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 6; --carico gli eventi attesi per std/MVNO --calcolo l'intervallo di 24h dalla chiusura finestra del giorno precedente, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_por:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),4); temp_data_fin_por:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),3); FOR rec IN eventi_attesi LOOP n_rec := n_rec +1; INSERT INTO MNP_DW_SLA_FRANCHIGIA_OUT ( TIPO_EVENTO, DATA_EVENTO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DONOR_RETE, RECIPIENT_RETE, EVENTI_ATTESI, PROCESSO,MESE_COMP_FINALE) VALUES ( 'SLA3' ,trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donatingRete ,rec.recipientRete ,rec.eventiAttesi ,'R' ,mese_comp ); END LOOP; --aggiorno gli eventi in SLA per std/MVNO --calcolo l'intervallo di pic da inizio giornata, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_esp:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||'00' ||'00'||'01'),'YYYYMMDDHH24MISS'),1); temp_data_fin_esp:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS'),1); FOR rec IN eventi_in_SLA LOOP UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_IN_SLA = rec.eventiSLA WHERE TIPO_EVENTO = 'SLA3' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC); EXCEPTION WHEN OTHERS THEN if eventi_attesi%ISOPEN then CLOSE eventi_attesi; end if; if eventi_in_sla%ISOPEN then CLOSE eventi_in_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CALCOLO_SLA3_RECIPIENT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CALCOLO_SLA3_RECIPIENT; procedure CALCOLO_SLA0_DONOR(dataRif IN DATE,cod_errore OUT NUMBER) IS temp_data_in_att DATE; temp_data_fin_att DATE; temp_data_in_pic DATE; temp_data_fin_pic DATE; ora_fin_ftemp1 CHAR(2); min_fin_ftemp1 CHAR(2); sec_fin_ftemp1 CHAR(2); ora_fin_ftempH CHAR(2); min_fin_ftempH CHAR(2); sec_fin_ftempH CHAR(2); ora_fin_ftemp2 CHAR(2); min_fin_ftemp2 CHAR(2); sec_fin_ftemp2 CHAR(2); mese_comp CHAR(7); n_rec integer := 0; proc_name constant varchar2(30) := 'CALCOLO_SLA0_DONOR'; D_ini DATE; D_fine DATE; eventi NUMBER; CURSOR eventi_attesi is SELECT COUNT(*) AS eventiAttesi ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , a.CODICE_OPERATORE_DONATING as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta a ,mnp.mnp_xml_richiesta_in rich_in ,mnp.mnp_xml_in xml_in ,mnp.mnp_xml_ack_out ack_out WHERE xml_in.tipo_file = 1 AND rich_in.id_richiesta = a.id_richiesta AND xml_in.nome_file = rich_in.nome_file AND ack_out.nome_file_riferito = rich_in.nome_file AND (a.richiestaAdHocAom = 0 and a.richiestaAdHoc = 0 ) AND to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_att AND temp_data_fin_att AND xml_in.NOME_FILE = (select min(X.NOME_FILE) FROM mnp.MNP_XML_IN x, mnp.MNP_XML_RICHIESTA_IN y WHERE y.ID_RICHIESTA= rich_in.ID_RICHIESTA AND x.TIPO_FILE=1 --attvazione AND y.NOME_FILE = x.NOME_FILE ) GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; CURSOR eventi_attesi_hoc is SELECT COUNT(*) AS eventiAttesi ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , a.CODICE_OPERATORE_DONATING as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta a ,mnp.mnp_xml_richiesta_in rich_in ,mnp.mnp_xml_in xml_in ,mnp.mnp_xml_ack_out ack_out WHERE xml_in.tipo_file = 9 AND rich_in.id_richiesta = a.id_richiesta AND xml_in.nome_file = rich_in.nome_file AND ack_out.nome_file_riferito = rich_in.nome_file AND (a.richiestaAdHocAom > 0 or a.richiestaAdHoc > 0 ) AND to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_att AND temp_data_fin_att AND xml_in.NOME_FILE = (select min(X.NOME_FILE) FROM mnp.MNP_XML_IN x, mnp.MNP_XML_RICHIESTA_IN y WHERE y.ID_RICHIESTA= rich_in.ID_RICHIESTA AND x.TIPO_FILE=9 --attvazione AND y.NOME_FILE = x.NOME_FILE ) GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; CURSOR eventi_in_sla is SELECT COUNT(*) AS eventiSLA ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , a.CODICE_OPERATORE_DONATING as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta a ,mnp.mnp_xml_richiesta_in rich_in ,mnp.mnp_xml_in xml_in ,mnp.mnp_xml_ack_out ack_out_att ,mnp.mnp_xml_out xml_out_pic ,mnp.mnp_xml_richiesta_out rich_out WHERE xml_in.tipo_file = 1 AND rich_in.id_richiesta = a.id_richiesta AND ack_out_att.nome_file_riferito = rich_in.nome_file AND xml_in.nome_file = rich_in.nome_file AND xml_out_pic.tipo_file = 5 AND rich_out.id_richiesta = rich_in.id_richiesta AND xml_out_pic.nome_file = rich_out.nome_file AND (a.richiestaAdHocAom = 0 and a.richiestaAdHoc = 0 ) AND to_date( SUBSTR( ack_out_att.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_att AND temp_data_fin_att AND to_date( SUBSTR( xml_out_pic.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_pic AND temp_data_fin_pic AND xml_in.NOME_FILE = (select min(X.NOME_FILE) FROM mnp.MNP_XML_IN x, mnp.MNP_XML_RICHIESTA_IN y WHERE y.ID_RICHIESTA= rich_in.ID_RICHIESTA AND x.TIPO_FILE=1 --attvazione AND y.NOME_FILE = x.NOME_FILE ) AND xml_out_pic.NOME_FILE = (select min(X.NOME_FILE) FROM mnp.MNP_XML_OUT x, mnp.MNP_XML_RICHIESTA_OUT y WHERE y.ID_RICHIESTA= rich_in.ID_RICHIESTA AND x.TIPO_FILE=5 --pic AND y.NOME_FILE = x.NOME_FILE ) GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; CURSOR eventi_in_sla_hoc is SELECT COUNT(*) AS eventiSLA ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , a.CODICE_OPERATORE_DONATING as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta a ,mnp.mnp_xml_richiesta_in rich_in ,mnp.mnp_xml_in xml_in ,mnp.mnp_xml_ack_out ack_out_att ,mnp.mnp_xml_out xml_out_pic ,mnp.mnp_xml_richiesta_out rich_out WHERE xml_in.tipo_file = 9 AND rich_in.id_richiesta = a.id_richiesta AND ack_out_att.nome_file_riferito = rich_in.nome_file AND xml_in.nome_file = rich_in.nome_file AND xml_out_pic.tipo_file = 5 AND rich_out.id_richiesta = rich_in.id_richiesta AND xml_out_pic.nome_file = rich_out.nome_file AND (a.richiestaAdHocAom > 0 or a.richiestaAdHoc > 0 ) AND to_date( SUBSTR( ack_out_att.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_att AND temp_data_fin_att AND to_date( SUBSTR( xml_out_pic.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_pic AND temp_data_fin_pic AND xml_in.NOME_FILE = (select min(X.NOME_FILE) FROM mnp.MNP_XML_IN x, mnp.MNP_XML_RICHIESTA_IN y WHERE y.ID_RICHIESTA= rich_in.ID_RICHIESTA AND x.TIPO_FILE=9 --attvazione AND y.NOME_FILE = x.NOME_FILE ) AND xml_out_pic.NOME_FILE = (select min(X.NOME_FILE) FROM mnp.MNP_XML_OUT x, mnp.MNP_XML_RICHIESTA_OUT y WHERE y.ID_RICHIESTA= rich_in.ID_RICHIESTA AND x.TIPO_FILE=5 --pic AND y.NOME_FILE = x.NOME_FILE ) GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; BEGIN cod_errore := 0; ora_fin_ftemp1 := null; min_fin_ftemp1 := null; sec_fin_ftemp1 := null; ora_fin_ftemp2 := null; min_fin_ftemp2 := null; sec_fin_ftemp2 := null; ora_fin_ftempH := null; min_fin_ftempH := null; sec_fin_ftempH := null; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); /*il mese di competenza viene impostato sull'evento finale*/ mese_comp:= TO_CHAR (dwh.FUN_GIORNI_MENO (dataRif,1),'mm/yyyy'); SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp1,min_fin_ftemp1,sec_fin_ftemp1 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 1; -- RICAVA FINESTRE TEMPORALI PER TIPO FILE 9 ATTIVAZIONE P.HOC SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftempH,min_fin_ftempH,sec_fin_ftempH FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 9; -- per pic presa dal nome file out non sono previsti i 15 minuti SELECT SUBSTR(T_FINALE, 1,2), SUBSTR(T_FINALE, 4,2), SUBSTR(T_FINALE, 7,2) INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 5; --carico gli eventi attesi per std/MVNO --calcolo l'intervallo di 24h dalla chiusura finestra del giorno precedente, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_att:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),2); temp_data_fin_att:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),1); FOR rec IN eventi_attesi LOOP n_rec := n_rec +1; INSERT INTO MNP_DW_SLA_FRANCHIGIA_OUT ( TIPO_EVENTO, DATA_EVENTO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DONOR_RETE, RECIPIENT_RETE, EVENTI_ATTESI, PROCESSO,MESE_COMP_FINALE) VALUES ( 'SLA0' ,trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donatingRete ,rec.recipientRete ,rec.eventiAttesi ,'D' ,mese_comp ); END LOOP; --carico gli eventi attesi per pHOC --calcolo l'intervallo di 24h dalla chiusura finestra del giorno precedente, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_att:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftempH ||min_fin_ftempH||sec_fin_ftempH),'YYYYMMDDHH24MISS'),2); temp_data_fin_att:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftempH ||min_fin_ftempH||sec_fin_ftempH),'YYYYMMDDHH24MISS'),1); FOR rec IN eventi_attesi_hoc LOOP BEGIN n_rec := n_rec +1; INSERT INTO MNP_DW_SLA_FRANCHIGIA_OUT ( TIPO_EVENTO, DATA_EVENTO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DONOR_RETE, RECIPIENT_RETE, EVENTI_ATTESI, PROCESSO, MESE_COMP_FINALE) VALUES ( 'SLA0' ,trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donatingRete ,rec.recipientRete ,rec.eventiAttesi ,'D' ,mese_comp ); EXCEPTION -- potrebbe essere già presente un record per progetti std/mvno. In questo caso devo sommare WHEN dup_val_on_index THEN BEGIN -- lettura dati preesistenti SELECT EVENTI_ATTESI INTO eventi FROM MNP_DW_SLA_FRANCHIGIA_OUT WHERE TIPO_EVENTO = 'SLA0' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; eventi:= eventi + rec.eventiAttesi; UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_ATTESI = eventi WHERE TIPO_EVENTO = 'SLA0' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END; END; END LOOP; --aggiorno gli eventi in SLA per std/MVNO --calcolo l'intervallo di pic da inizio giornata, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_pic:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||'00' ||'00'||'01'),'YYYYMMDDHH24MISS'),1); temp_data_fin_pic:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS'),1); FOR rec IN eventi_in_SLA LOOP UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_IN_SLA = rec.eventiSLA WHERE TIPO_EVENTO = 'SLA0' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END LOOP; FOR rec IN eventi_in_SLA_hoc LOOP UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_IN_SLA = EVENTI_IN_SLA + rec.eventiSLA WHERE TIPO_EVENTO = 'SLA0' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC); EXCEPTION WHEN OTHERS THEN if eventi_attesi%ISOPEN then CLOSE eventi_attesi; end if; if eventi_attesi_hoc%ISOPEN then CLOSE eventi_attesi_hoc; end if; if eventi_in_sla%ISOPEN then CLOSE eventi_in_sla; end if; if eventi_in_sla_hoc%ISOPEN then CLOSE eventi_in_sla_hoc; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CALCOLO_SLA0_DONOR ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CALCOLO_SLA0_DONOR; procedure CALCOLO_SLA1_DONOR(dataRif IN DATE,cod_errore OUT NUMBER) IS temp_data_in_att DATE; temp_data_fin_att DATE; temp_data_in_val DATE; temp_data_fin_val DATE; ora_fin_ftemp1 CHAR(2); min_fin_ftemp1 CHAR(2); sec_fin_ftemp1 CHAR(2); ora_fin_ftempH CHAR(2); min_fin_ftempH CHAR(2); sec_fin_ftempH CHAR(2); ora_fin_ftemp2 CHAR(2); min_fin_ftemp2 CHAR(2); sec_fin_ftemp2 CHAR(2); mese_comp CHAR(7); n_rec integer := 0; proc_name constant varchar2(30) := 'CALCOLO_SLA1_DONOR'; D_ini DATE; D_fine DATE; eventi NUMBER; CURSOR eventi_attesi is SELECT COUNT(*) AS eventiAttesi ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , a.CODICE_OPERATORE_DONATING as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta a ,mnp.mnp_xml_richiesta_in rich_in ,mnp.mnp_xml_in xml_in ,mnp.mnp_xml_ack_out ack_out WHERE xml_in.tipo_file = 1 AND rich_in.id_richiesta = a.id_richiesta AND xml_in.nome_file = rich_in.nome_file AND ack_out.nome_file_riferito = rich_in.nome_file AND (a.richiestaAdHocAom = 0 and a.richiestaAdHoc = 0 ) AND a.stato <> 4 AND to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_att AND temp_data_fin_att GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; CURSOR eventi_attesi_hoc is SELECT COUNT(*) AS eventiAttesi ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , a.CODICE_OPERATORE_DONATING as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta a ,mnp.mnp_xml_richiesta_in rich_in ,mnp.mnp_xml_in xml_in ,mnp.mnp_xml_ack_out ack_out WHERE xml_in.tipo_file = 9 AND rich_in.id_richiesta = a.id_richiesta AND xml_in.nome_file = rich_in.nome_file AND ack_out.nome_file_riferito = rich_in.nome_file AND (a.richiestaAdHocAom > 0 or a.richiestaAdHoc > 0 ) AND a.stato <> 4 AND to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_att AND temp_data_fin_att GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; CURSOR eventi_in_sla is SELECT COUNT(*) AS eventiSLA ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , a.CODICE_OPERATORE_DONATING as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta a ,mnp.mnp_xml_richiesta_in rich_in ,mnp.mnp_xml_in xml_in ,mnp.mnp_xml_ack_out ack_out_att ,mnp.mnp_xml_out xml_out_val ,mnp.mnp_xml_richiesta_out rich_out WHERE xml_in.tipo_file = 1 AND rich_in.id_richiesta = a.id_richiesta AND ack_out_att.nome_file_riferito = rich_in.nome_file AND xml_in.nome_file = rich_in.nome_file AND xml_out_val.tipo_file = 2 AND rich_out.id_richiesta = rich_in.id_richiesta AND xml_out_val.nome_file = rich_out.nome_file AND (a.richiestaAdHocAom = 0 and a.richiestaAdHoc = 0 ) AND to_date( SUBSTR( ack_out_att.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_att AND temp_data_fin_att AND to_date( SUBSTR( xml_out_val.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_val AND temp_data_fin_val GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; CURSOR eventi_in_sla_hoc is SELECT COUNT(*) AS eventiSLA ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , a.CODICE_OPERATORE_DONATING as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta a ,mnp.mnp_xml_richiesta_in rich_in ,mnp.mnp_xml_in xml_in ,mnp.mnp_xml_ack_out ack_out_att ,mnp.mnp_xml_out xml_out_val ,mnp.mnp_xml_richiesta_out rich_out WHERE xml_in.tipo_file = 9 AND rich_in.id_richiesta = a.id_richiesta AND ack_out_att.nome_file_riferito = rich_in.nome_file AND xml_in.nome_file = rich_in.nome_file AND xml_out_val.tipo_file = 2 AND rich_out.id_richiesta = rich_in.id_richiesta AND xml_out_val.nome_file = rich_out.nome_file AND (a.richiestaAdHocAom > 0 or a.richiestaAdHoc > 0 ) AND to_date( SUBSTR( ack_out_att.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_att AND temp_data_fin_att AND to_date( SUBSTR( xml_out_val.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_val AND temp_data_fin_val AND xml_out_val.NOME_FILE = (select min(X.NOME_FILE) FROM mnp.MNP_XML_OUT x, mnp.MNP_XML_RICHIESTA_OUT y WHERE y.ID_RICHIESTA= rich_in.ID_RICHIESTA AND x.TIPO_FILE=2 --validazione AND y.NOME_FILE = x.NOME_FILE ) GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; BEGIN cod_errore := 0; ora_fin_ftemp1 := null; min_fin_ftemp1 := null; sec_fin_ftemp1 := null; ora_fin_ftemp2 := null; min_fin_ftemp2 := null; sec_fin_ftemp2 := null; ora_fin_ftempH := null; min_fin_ftempH := null; sec_fin_ftempH := null; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); /*il mese di competenza viene impostato sull'evento finale*/ mese_comp:= TO_CHAR (dwh.FUN_GIORNI_MENO (dataRif,1),'mm/yyyy'); SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp1,min_fin_ftemp1,sec_fin_ftemp1 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 1; -- RICAVA FINESTRE TEMPORALI PER TIPO FILE 9 ATTIVAZIONE P.HOC SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftempH,min_fin_ftempH,sec_fin_ftempH FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 9; -- per pic presa dal nome file out non sono previsti i 15 minuti SELECT SUBSTR(T_FINALE, 1,2), SUBSTR(T_FINALE, 4,2), SUBSTR(T_FINALE, 7,2) INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 2 AND TIPO_OPERATORE = 'AOM'; --carico gli eventi attesi per std/MVNO --calcolo l'intervallo di 24h dalla chiusura finestra del giorno precedente, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_att:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),3); temp_data_fin_att:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),2); FOR rec IN eventi_attesi LOOP n_rec := n_rec +1; INSERT INTO MNP_DW_SLA_FRANCHIGIA_OUT ( TIPO_EVENTO, DATA_EVENTO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DONOR_RETE, RECIPIENT_RETE, EVENTI_ATTESI, PROCESSO,MESE_COMP_FINALE) VALUES ( 'SLA1' ,trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donatingRete ,rec.recipientRete ,rec.eventiAttesi ,'D' ,mese_comp ); END LOOP; --carico gli eventi attesi per pHOC --calcolo l'intervallo di 24h dalla chiusura finestra del giorno precedente, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_att:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftempH ||min_fin_ftempH||sec_fin_ftempH),'YYYYMMDDHH24MISS'),3); temp_data_fin_att:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftempH ||min_fin_ftempH||sec_fin_ftempH),'YYYYMMDDHH24MISS'),2); FOR rec IN eventi_attesi_hoc LOOP BEGIN n_rec := n_rec +1; INSERT INTO MNP_DW_SLA_FRANCHIGIA_OUT ( TIPO_EVENTO, DATA_EVENTO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DONOR_RETE, RECIPIENT_RETE, EVENTI_ATTESI, PROCESSO, MESE_COMP_FINALE) VALUES ( 'SLA1' ,trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donatingRete ,rec.recipientRete ,rec.eventiAttesi ,'D' ,mese_comp ); EXCEPTION -- potrebbe essere già presente un record per progetti std/mvno. In questo caso devo sommare WHEN dup_val_on_index THEN BEGIN -- lettura dati preesistenti SELECT EVENTI_ATTESI INTO eventi FROM MNP_DW_SLA_FRANCHIGIA_OUT WHERE TIPO_EVENTO = 'SLA1' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; eventi:= eventi + rec.eventiAttesi; UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_ATTESI = eventi WHERE TIPO_EVENTO = 'SLA1' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END; END; END LOOP; --aggiorno gli eventi in SLA per std/MVNO --calcolo l'intervallo di pic da inizio giornata, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_val:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||'00' ||'00'||'01'),'YYYYMMDDHH24MISS'),1); temp_data_fin_val:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS'),1); FOR rec IN eventi_in_SLA LOOP UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_IN_SLA = rec.eventiSLA WHERE TIPO_EVENTO = 'SLA1' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END LOOP; FOR rec IN eventi_in_SLA_hoc LOOP UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_IN_SLA = EVENTI_IN_SLA + rec.eventiSLA WHERE TIPO_EVENTO = 'SLA1' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC); EXCEPTION WHEN OTHERS THEN if eventi_attesi%ISOPEN then CLOSE eventi_attesi; end if; if eventi_attesi_hoc%ISOPEN then CLOSE eventi_attesi_hoc; end if; if eventi_in_sla%ISOPEN then CLOSE eventi_in_sla; end if; if eventi_in_sla_hoc%ISOPEN then CLOSE eventi_in_sla_hoc; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CALCOLO_SLA1_DONOR ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CALCOLO_SLA1_DONOR; procedure CALCOLO_SLA2_DONOR(dataRif IN DATE,cod_errore OUT NUMBER) IS temp_data_in_esp DATE; temp_data_fin_esp DATE; temp_data_in_val DATE; temp_data_fin_val DATE; ora_fin_ftemp1 CHAR(2); min_fin_ftemp1 CHAR(2); sec_fin_ftemp1 CHAR(2); ora_fin_ftemp2 CHAR(2); min_fin_ftemp2 CHAR(2); sec_fin_ftemp2 CHAR(2); mese_comp CHAR(7); n_rec integer := 0; proc_name constant varchar2(30) := 'CALCOLO_SLA2_DONOR'; D_ini DATE; D_fine DATE; eventi NUMBER; CURSOR eventi_attesi is SELECT COUNT(*) AS eventiAttesi ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , a.CODICE_OPERATORE_DONATING as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta a ,mnp.mnp_xml_richiesta_out rich_out ,mnp.mnp_xml_out xml_out ,mnp.mnp_xml_ack_in ack_in WHERE xml_out.tipo_file = 2 AND rich_out.id_richiesta = a.id_richiesta AND xml_out.nome_file = rich_out.nome_file AND ack_in.nome_file_riferito = rich_out.nome_file AND (a.richiestaAdHocAom = 0 and a.richiestaAdHoc = 0 ) AND a.stato <> 10 AND to_date( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_val AND temp_data_fin_val GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; CURSOR eventi_attesi_hoc is SELECT COUNT(*) AS eventiAttesi ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , a.CODICE_OPERATORE_DONATING as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta a ,mnp.mnp_xml_richiesta_out rich_out ,mnp.mnp_xml_out xml_out ,mnp.mnp_xml_ack_in ack_in WHERE xml_out.tipo_file = 2 AND rich_out.id_richiesta = a.id_richiesta AND xml_out.nome_file = rich_out.nome_file AND ack_in.nome_file_riferito = rich_out.nome_file AND (a.richiestaAdHocAom > 0 or a.richiestaAdHoc > 0 ) AND a.stato <> 10 AND to_date( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_val AND temp_data_fin_val GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; CURSOR eventi_in_sla is SELECT COUNT(*) AS eventiSLA ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , a.CODICE_OPERATORE_DONATING as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta a ,mnp.mnp_xml_richiesta_out rich_out_esp ,mnp.mnp_xml_richiesta_out rich_out_val ,mnp.mnp_xml_out xml_out_esp ,mnp.mnp_xml_out xml_out_val ,mnp.mnp_xml_ack_in ack_in_val WHERE xml_out_esp.tipo_file = 6 AND rich_out_esp.id_richiesta = a.id_richiesta AND rich_out_esp.nome_file=xml_out_esp.nome_file AND ack_in_val.nome_file_riferito = rich_out_val.nome_file AND xml_out_val.nome_file = rich_out_val.nome_file AND xml_out_val.tipo_file = 2 AND rich_out_val.id_richiesta = rich_out_esp.id_richiesta AND xml_out_esp.DESTINATARIO <> 'NPTS' AND (a.richiestaAdHocAom = 0 and a.richiestaAdHoc = 0 ) AND to_date( SUBSTR( ack_in_val.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_val AND temp_data_fin_val AND to_date( SUBSTR( xml_out_esp.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_esp AND temp_data_fin_esp GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; CURSOR eventi_in_sla_hoc is SELECT COUNT(*) AS eventiSLA ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , a.CODICE_OPERATORE_DONATING as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta a ,mnp.mnp_xml_richiesta_out rich_out_esp ,mnp.mnp_xml_richiesta_out rich_out_val ,mnp.mnp_xml_out xml_out_esp ,mnp.mnp_xml_out xml_out_val ,mnp.mnp_xml_ack_in ack_in_val WHERE xml_out_esp.tipo_file = 6 AND rich_out_esp.id_richiesta = a.id_richiesta AND rich_out_esp.nome_file=xml_out_esp.nome_file AND ack_in_val.nome_file_riferito = rich_out_val.nome_file AND xml_out_val.nome_file = rich_out_val.nome_file AND xml_out_val.tipo_file = 2 AND rich_out_val.id_richiesta = rich_out_esp.id_richiesta AND xml_out_esp.DESTINATARIO <> 'NPTS' AND (a.richiestaAdHocAom > 0 or a.richiestaAdHoc > 0 ) AND to_date( SUBSTR( ack_in_val.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_val AND temp_data_fin_val AND to_date( SUBSTR( xml_out_esp.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_esp AND temp_data_fin_esp AND xml_out_val.NOME_FILE = (select max(X.NOME_FILE) FROM mnp.MNP_XML_OUT x, mnp.MNP_XML_RICHIESTA_OUT y WHERE y.ID_RICHIESTA= rich_out_val.ID_RICHIESTA AND x.TIPO_FILE=2 --validazione AND y.NOME_FILE = x.NOME_FILE ) GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING,a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; BEGIN cod_errore := 0; ora_fin_ftemp1 := null; min_fin_ftemp1 := null; sec_fin_ftemp1 := null; ora_fin_ftemp2 := null; min_fin_ftemp2 := null; sec_fin_ftemp2 := null; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); /*il mese di competenza viene impostato sull'evento finale*/ mese_comp:= TO_CHAR (dwh.FUN_GIORNI_MENO (dataRif,1),'mm/yyyy'); SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp1,min_fin_ftemp1,sec_fin_ftemp1 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 2 AND TIPO_OPERATORE = 'AOM'; -- per pic presa dal nome file out non sono previsti i 15 minuti SELECT SUBSTR(T_FINALE, 1,2), SUBSTR(T_FINALE, 4,2), SUBSTR(T_FINALE, 7,2) INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 6; --carico gli eventi attesi per std/MVNO --calcolo l'intervallo di 24h dalla chiusura finestra del giorno precedente, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_val:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),4); temp_data_fin_val:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),3); FOR rec IN eventi_attesi LOOP n_rec := n_rec +1; INSERT INTO MNP_DW_SLA_FRANCHIGIA_OUT ( TIPO_EVENTO, DATA_EVENTO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DONOR_RETE, RECIPIENT_RETE, EVENTI_ATTESI, PROCESSO,MESE_COMP_FINALE) VALUES ( 'SLA2' ,trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donatingRete ,rec.recipientRete ,rec.eventiAttesi ,'D' ,mese_comp ); END LOOP; --carico gli eventi attesi per pHOC FOR rec IN eventi_attesi_hoc LOOP BEGIN n_rec := n_rec +1; INSERT INTO MNP_DW_SLA_FRANCHIGIA_OUT ( TIPO_EVENTO, DATA_EVENTO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DONOR_RETE, RECIPIENT_RETE, EVENTI_ATTESI, PROCESSO, MESE_COMP_FINALE) VALUES ( 'SLA2' ,trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donatingRete ,rec.recipientRete ,rec.eventiAttesi ,'D' ,mese_comp ); EXCEPTION -- potrebbe essere già presente un record per progetti std/mvno. In questo caso devo sommare WHEN dup_val_on_index THEN BEGIN -- lettura dati preesistenti SELECT EVENTI_ATTESI INTO eventi FROM MNP_DW_SLA_FRANCHIGIA_OUT WHERE TIPO_EVENTO = 'SLA2' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; eventi:= eventi + rec.eventiAttesi; UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_ATTESI = eventi WHERE TIPO_EVENTO = 'SLA2' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END; END; END LOOP; --aggiorno gli eventi in SLA per std/MVNO --calcolo l'intervallo di pic da inizio giornata, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_esp:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||'00' ||'00'||'01'),'YYYYMMDDHH24MISS'),1); temp_data_fin_esp:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS'),1); FOR rec IN eventi_in_SLA LOOP UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_IN_SLA = rec.eventiSLA WHERE TIPO_EVENTO = 'SLA2' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END LOOP; FOR rec IN eventi_in_SLA_hoc LOOP UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_IN_SLA = EVENTI_IN_SLA + rec.eventiSLA WHERE TIPO_EVENTO = 'SLA2' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC); EXCEPTION WHEN OTHERS THEN if eventi_attesi%ISOPEN then CLOSE eventi_attesi; end if; if eventi_attesi_hoc%ISOPEN then CLOSE eventi_attesi_hoc; end if; if eventi_in_sla%ISOPEN then CLOSE eventi_in_sla; end if; if eventi_in_sla_hoc%ISOPEN then CLOSE eventi_in_sla_hoc; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CALCOLO_SLA2_DONOR ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CALCOLO_SLA2_DONOR; procedure CALCOLO_SLA3_DONOR(dataRif IN DATE,cod_errore OUT NUMBER) IS temp_data_in_esp DATE; temp_data_fin_esp DATE; temp_data_in_por DATE; temp_data_fin_por DATE; ora_fin_ftemp1 CHAR(2); min_fin_ftemp1 CHAR(2); sec_fin_ftemp1 CHAR(2); ora_fin_ftemp2 CHAR(2); min_fin_ftemp2 CHAR(2); sec_fin_ftemp2 CHAR(2); mese_comp CHAR(7); n_rec integer := 0; proc_name constant varchar2(30) := 'CALCOLO_SLA3_DONOR'; D_ini DATE; D_fine DATE; eventi NUMBER; CURSOR eventi_attesi is SELECT COUNT(*) AS eventiAttesi ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , 'TIMG' as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta_porting a ,mnp.mnp_xml_richiesta_in rich_in ,mnp.mnp_xml_in xml_in ,mnp.mnp_xml_ack_out ack_out WHERE xml_in.tipo_file = 3 AND rich_in.id_richiesta = a.id_richiesta AND xml_in.nome_file = rich_in.nome_file AND ack_out.nome_file_riferito = rich_in.nome_file AND to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_por AND temp_data_fin_por GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; CURSOR eventi_in_sla is SELECT COUNT(*) AS eventiSLA ,a.CODICE_OPERATORE_RECIPIENT as recipientRete , 'TIMG' as donatingRete ,a.CODICE_OPERATORE_DON_EFF as donorEffettivo ,a.codice_operatore_rec_eff as recipientEffettivo FROM mnp.mnp_gestione_richiesta_porting a ,mnp.mnp_xml_richiesta_in rich_in ,mnp.mnp_xml_in xml_in ,mnp.mnp_xml_ack_out ack_out ,mnp.mnp_xml_richiesta_out rich_out_esp ,mnp.mnp_xml_out xml_out_esp WHERE xml_out_esp.tipo_file = 6 AND rich_out_esp.id_richiesta = a.id_richiesta AND rich_out_esp.nome_file=xml_out_esp.nome_file AND ack_out.nome_file_riferito = rich_in.nome_file AND xml_in.nome_file = rich_in.nome_file AND xml_in.tipo_file = 3 AND rich_in.id_richiesta = rich_out_esp.id_richiesta AND xml_out_esp.DESTINATARIO <> 'NPTS' AND to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_por AND temp_data_fin_por AND to_date( SUBSTR( xml_out_esp.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_esp AND temp_data_fin_esp AND xml_out_esp.NOME_FILE = (select min(X.NOME_FILE) FROM mnp.MNP_XML_OUT x, mnp.MNP_XML_RICHIESTA_OUT y WHERE y.ID_RICHIESTA= rich_out_esp.ID_RICHIESTA AND x.TIPO_FILE=6 --espletamento AND y.NOME_FILE = x.NOME_FILE ) GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DON_EFF, a.codice_operatore_rec_eff; BEGIN cod_errore := 0; ora_fin_ftemp1 := null; min_fin_ftemp1 := null; sec_fin_ftemp1 := null; ora_fin_ftemp2 := null; min_fin_ftemp2 := null; sec_fin_ftemp2 := null; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); /*il mese di competenza viene impostato sull'evento finale*/ mese_comp:= TO_CHAR (dwh.FUN_GIORNI_MENO (dataRif,1),'mm/yyyy'); SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp1,min_fin_ftemp1,sec_fin_ftemp1 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 3; -- per pic presa dal nome file out non sono previsti i 15 minuti SELECT SUBSTR(T_FINALE, 1,2), SUBSTR(T_FINALE, 4,2), SUBSTR(T_FINALE, 7,2) INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 6; --carico gli eventi attesi per std/MVNO --calcolo l'intervallo di 24h dalla chiusura finestra del giorno precedente, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_por:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),4); temp_data_fin_por:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),3); FOR rec IN eventi_attesi LOOP n_rec := n_rec +1; INSERT INTO MNP_DW_SLA_FRANCHIGIA_OUT ( TIPO_EVENTO, DATA_EVENTO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DONOR_RETE, RECIPIENT_RETE, EVENTI_ATTESI, PROCESSO,MESE_COMP_FINALE) VALUES ( 'SLA3' ,trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donatingRete ,rec.recipientRete ,rec.eventiAttesi ,'D' ,mese_comp ); END LOOP; --aggiorno gli eventi in SLA per std/MVNO --calcolo l'intervallo di espl da inizio giornata, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_esp:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||'00' ||'00'||'01'),'YYYYMMDDHH24MISS'),1); temp_data_fin_esp:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS'),1); FOR rec IN eventi_in_SLA LOOP UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_IN_SLA = rec.eventiSLA WHERE TIPO_EVENTO = 'SLA3' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC); EXCEPTION WHEN OTHERS THEN if eventi_attesi%ISOPEN then CLOSE eventi_attesi; end if; if eventi_in_sla%ISOPEN then CLOSE eventi_in_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CALCOLO_SLA3_DONOR ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CALCOLO_SLA3_DONOR; procedure CALCOLO_SLA1_DONOR_VIRT(dataRif IN DATE,cod_errore OUT NUMBER) IS temp_data_in_att DATE; temp_data_fin_att DATE; temp_data_in_val DATE; temp_data_fin_val DATE; ora_fin_ftemp1 CHAR(2); min_fin_ftemp1 CHAR(2); sec_fin_ftemp1 CHAR(2); ora_fin_ftemp2 CHAR(2); min_fin_ftemp2 CHAR(2); sec_fin_ftemp2 CHAR(2); mese_comp CHAR(7); n_rec integer := 0; proc_name constant varchar2(30) := 'CALCOLO_SLA1_DONOR_VIRT'; D_ini DATE; D_fine DATE; eventi NUMBER; CURSOR eventi_attesi is SELECT COUNT(*) AS eventiAttesi ,'TIMG' as recipientRete , 'TIMG' as donatingRete ,a.CODICE_OPERATORE_DONATING as donorEffettivo ,a.codice_operatore_recipient as recipientEffettivo FROM mnp.MNP_GEST_RICH_DONOR_VIRT a ,mnp.MNP_STORICO_RICH_DON_VIRT sto WHERE a.id_richiesta = sto.id_richiesta AND sto.stato_a = 2 AND sto.data_i_o BETWEEN temp_data_in_att AND temp_data_fin_att GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING; CURSOR eventi_in_sla is SELECT COUNT(*) AS eventiSLA ,'TIMG' as recipientRete , 'TIMG' as donatingRete ,a.CODICE_OPERATORE_DONATING as donorEffettivo ,a.codice_operatore_recipient as recipientEffettivo FROM mnp.MNP_GEST_RICH_DONOR_VIRT a ,mnp.MNP_STORICO_RICH_DON_VIRT sto_in ,mnp.MNP_STORICO_RICH_DON_VIRT sto_fin WHERE a.id_richiesta = sto_in.id_richiesta AND a.id_richiesta = sto_fin.id_richiesta AND sto_in.stato_a = 2 AND sto_fin.stato_a IN (6,7) AND sto_in.data_i_o BETWEEN temp_data_in_att AND temp_data_fin_att AND sto_fin.data_i_o BETWEEN temp_data_in_val AND temp_data_fin_val GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING; BEGIN cod_errore := 0; ora_fin_ftemp1 := null; min_fin_ftemp1 := null; sec_fin_ftemp1 := null; ora_fin_ftemp2 := null; min_fin_ftemp2 := null; sec_fin_ftemp2 := null; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); /*il mese di competenza viene impostato sull'evento finale*/ mese_comp:= TO_CHAR (dwh.FUN_GIORNI_MENO (dataRif,1),'mm/yyyy'); SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp1,min_fin_ftemp1,sec_fin_ftemp1 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 1; -- per pic presa dal nome file out non sono previsti i 15 minuti SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 2 AND TIPO_OPERATORE = 'MVNO'; --carico gli eventi attesi per std/MVNO --calcolo l'intervallo di 24h dalla chiusura finestra del giorno precedente, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_att:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),3); temp_data_fin_att:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),2); FOR rec IN eventi_attesi LOOP n_rec := n_rec +1; INSERT INTO MNP_DW_SLA_FRANCHIGIA_OUT ( TIPO_EVENTO, DATA_EVENTO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DONOR_RETE, RECIPIENT_RETE, EVENTI_ATTESI, PROCESSO,MESE_COMP_FINALE) VALUES ( 'SLA1' ,trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donatingRete ,rec.recipientRete ,rec.eventiAttesi ,'V' ,mese_comp ); END LOOP; --aggiorno gli eventi in SLA --calcolo l'intervallo di pic da inizio giornata, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_val:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||'00' ||'00'||'01'),'YYYYMMDDHH24MISS'),1); temp_data_fin_val:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS'),1); FOR rec IN eventi_in_SLA LOOP UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_IN_SLA = rec.eventiSLA WHERE TIPO_EVENTO = 'SLA1' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC); EXCEPTION WHEN OTHERS THEN if eventi_attesi%ISOPEN then CLOSE eventi_attesi; end if; if eventi_in_sla%ISOPEN then CLOSE eventi_in_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CALCOLO_SLA1_DON_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CALCOLO_SLA1_DONOR_VIRT; procedure CALCOLO_SLA2_DONOR_VIRT(dataRif IN DATE,cod_errore OUT NUMBER) IS temp_data_in_esp DATE; temp_data_fin_esp DATE; temp_data_in_val DATE; temp_data_fin_val DATE; ora_fin_ftemp1 CHAR(2); min_fin_ftemp1 CHAR(2); sec_fin_ftemp1 CHAR(2); ora_fin_ftemp2 CHAR(2); min_fin_ftemp2 CHAR(2); sec_fin_ftemp2 CHAR(2); mese_comp CHAR(7); n_rec integer := 0; proc_name constant varchar2(30) := 'CALCOLO_SLA2_DONOR_VIRT'; D_ini DATE; D_fine DATE; eventi NUMBER; CURSOR eventi_attesi is SELECT COUNT(*) AS eventiAttesi ,'TIMG' as recipientRete , 'TIMG' as donatingRete ,a.CODICE_OPERATORE_DONATING as donorEffettivo ,a.codice_operatore_recipient as recipientEffettivo FROM mnp.MNP_GEST_RICH_DONOR_VIRT a ,mnp.MNP_STORICO_RICH_DON_VIRT sto WHERE a.id_richiesta = sto.id_richiesta AND sto.stato_a = 6 AND sto.data_i_o BETWEEN temp_data_in_val AND temp_data_fin_val GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING; CURSOR eventi_in_sla is SELECT COUNT(*) AS eventiSLA ,'TIMG' as recipientRete , 'TIMG' as donatingRete ,a.CODICE_OPERATORE_DONATING as donorEffettivo ,a.codice_operatore_recipient as recipientEffettivo FROM mnp.MNP_GEST_RICH_DONOR_VIRT a ,mnp.MNP_STORICO_RICH_DON_VIRT sto_in ,mnp.MNP_STORICO_RICH_DON_VIRT sto_fin WHERE a.id_richiesta = sto_in.id_richiesta AND a.id_richiesta = sto_fin.id_richiesta AND sto_in.stato_a = 6 AND sto_fin.stato_a =10 AND sto_in.data_i_o BETWEEN temp_data_in_val AND temp_data_fin_val AND sto_fin.data_i_o BETWEEN temp_data_in_esp AND temp_data_fin_esp GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING; BEGIN cod_errore := 0; ora_fin_ftemp1 := null; min_fin_ftemp1 := null; sec_fin_ftemp1 := null; ora_fin_ftemp2 := null; min_fin_ftemp2 := null; sec_fin_ftemp2 := null; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); /*il mese di competenza viene impostato sull'evento finale*/ mese_comp:= TO_CHAR (dwh.FUN_GIORNI_MENO (dataRif,1),'mm/yyyy'); SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp1,min_fin_ftemp1,sec_fin_ftemp1 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 2 AND TIPO_OPERATORE = 'MVNO'; -- per pic presa dal nome file out non sono previsti i 15 minuti SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 6; --carico gli eventi attesi per std/MVNO --calcolo l'intervallo di 24h dalla chiusura finestra del giorno precedente, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_val:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),4); temp_data_fin_val:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),3); FOR rec IN eventi_attesi LOOP n_rec := n_rec +1; INSERT INTO MNP_DW_SLA_FRANCHIGIA_OUT ( TIPO_EVENTO, DATA_EVENTO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DONOR_RETE, RECIPIENT_RETE, EVENTI_ATTESI, PROCESSO,MESE_COMP_FINALE) VALUES ( 'SLA2' ,trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donatingRete ,rec.recipientRete ,rec.eventiAttesi ,'V' ,mese_comp ); END LOOP; --aggiorno gli eventi in SLA --calcolo l'intervallo di pic da inizio giornata, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_esp:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||'00' ||'00'||'01'),'YYYYMMDDHH24MISS'),1); temp_data_fin_esp:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS'),1); FOR rec IN eventi_in_SLA LOOP UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_IN_SLA = rec.eventiSLA WHERE TIPO_EVENTO = 'SLA2' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC); EXCEPTION WHEN OTHERS THEN if eventi_attesi%ISOPEN then CLOSE eventi_attesi; end if; if eventi_in_sla%ISOPEN then CLOSE eventi_in_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CALCOLO_SLA2_DON_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CALCOLO_SLA2_DONOR_VIRT; procedure CALCOLO_SLA3_DONOR_VIRT(dataRif IN DATE,cod_errore OUT NUMBER) IS temp_data_in_esp DATE; temp_data_fin_esp DATE; temp_data_in_por DATE; temp_data_fin_por DATE; ora_fin_ftemp1 CHAR(2); min_fin_ftemp1 CHAR(2); sec_fin_ftemp1 CHAR(2); ora_fin_ftemp2 CHAR(2); min_fin_ftemp2 CHAR(2); sec_fin_ftemp2 CHAR(2); mese_comp CHAR(7); n_rec integer := 0; proc_name constant varchar2(30) := 'CALCOLO_SLA3_DONOR_VIRT'; D_ini DATE; D_fine DATE; eventi NUMBER; CURSOR eventi_attesi is SELECT COUNT(*) AS eventiAttesi ,'TIMG' as recipientRete ,xml_out.destinatario as donatingRete ,a.CODICE_OPERATORE_DONATING as donorEffettivo ,a.codice_operatore_recipient as recipientEffettivo FROM mnp.mnp_gest_rich_donor_virt a ,mnp.mnp_xml_richiesta_out rich_out ,mnp.mnp_xml_out xml_out ,mnp.mnp_xml_ack_in ack_in WHERE xml_out.tipo_file = 3 AND rich_out.id_richiesta = a.id_richiesta AND xml_out.nome_file = rich_out.nome_file AND ack_in.nome_file_riferito = rich_out.nome_file AND xml_out.destinatario <> 'TIMG' AND to_date( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_por AND temp_data_fin_por GROUP BY a.CODICE_OPERATORE_RECIPIENT, xml_out.destinatario,a.codice_operatore_donating; CURSOR eventi_in_sla is SELECT COUNT(*) AS eventiSLA ,'TIMG' as recipientRete ,xml_out_por.destinatario as donatingRete ,a.CODICE_OPERATORE_DONATING as donorEffettivo ,a.codice_operatore_recipient as recipientEffettivo FROM mnp.mnp_gest_rich_donor_virt a ,mnp.mnp_xml_in xml_in_esp ,mnp.mnp_xml_richiesta_in rich_in_esp ,mnp.mnp_xml_ack_out ack_out_esp ,mnp.mnp_xml_out xml_out_por ,mnp.mnp_xml_richiesta_out rich_out_por ,mnp.mnp_xml_ack_in ack_in_por WHERE xml_in_esp.tipo_file = 6 AND rich_in_esp.id_richiesta = a.id_richiesta AND ack_out_esp.nome_file_riferito = rich_in_esp.nome_file AND xml_in_esp.nome_file = rich_in_esp.nome_file AND xml_out_por.tipo_file = 3 AND rich_out_por.id_richiesta = rich_in_esp.id_richiesta AND xml_out_por.nome_file = rich_out_por.nome_file AND ack_in_por.nome_file_riferito = rich_out_por.nome_file AND xml_out_por.destinatario= xml_in_esp.MITTENTE AND xml_in_esp.mittente <> a.codice_operatore_donating AND to_date( SUBSTR( ack_in_por.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_por AND temp_data_fin_por AND to_date( SUBSTR( ack_out_esp.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_esp AND temp_data_fin_esp GROUP BY a.CODICE_OPERATORE_RECIPIENT, xml_out_por.destinatario,a.CODICE_OPERATORE_donating; BEGIN cod_errore := 0; ora_fin_ftemp1 := null; min_fin_ftemp1 := null; sec_fin_ftemp1 := null; ora_fin_ftemp2 := null; min_fin_ftemp2 := null; sec_fin_ftemp2 := null; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); /*il mese di competenza viene impostato sull'evento finale*/ mese_comp:= TO_CHAR (dwh.FUN_GIORNI_MENO (dataRif,1),'mm/yyyy'); SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp1,min_fin_ftemp1,sec_fin_ftemp1 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 3; -- per pic presa dal nome file out non sono previsti i 15 minuti SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 6; --carico gli eventi attesi per std/MVNO --calcolo l'intervallo di 24h dalla chiusura finestra del giorno precedente, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_por:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),4); temp_data_fin_por:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),3); FOR rec IN eventi_attesi LOOP n_rec := n_rec +1; INSERT INTO MNP_DW_SLA_FRANCHIGIA_OUT ( TIPO_EVENTO, DATA_EVENTO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DONOR_RETE, RECIPIENT_RETE, EVENTI_ATTESI, PROCESSO,MESE_COMP_FINALE) VALUES ( 'SLA3' ,trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donatingRete ,rec.recipientRete ,rec.eventiAttesi ,'V' ,mese_comp ); END LOOP; --aggiorno gli eventi in SLA per std/MVNO --calcolo l'intervallo di pic da inizio giornata, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_esp:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||'00' ||'00'||'01'),'YYYYMMDDHH24MISS'),1); temp_data_fin_esp:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS'),1); FOR rec IN eventi_in_SLA LOOP UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_IN_SLA = rec.eventiSLA WHERE TIPO_EVENTO = 'SLA3' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC); EXCEPTION WHEN OTHERS THEN if eventi_attesi%ISOPEN then CLOSE eventi_attesi; end if; if eventi_in_sla%ISOPEN then CLOSE eventi_in_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CALCOLO_SLA3_DON_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CALCOLO_SLA3_DONOR_VIRT; procedure CALCOLO_SLA1_REC_VIRT(dataRif IN DATE,cod_errore OUT NUMBER) IS temp_data_in_att DATE; temp_data_fin_att DATE; temp_data_in_val DATE; temp_data_fin_val DATE; ora_fin_ftemp1 CHAR(2); min_fin_ftemp1 CHAR(2); sec_fin_ftemp1 CHAR(2); ora_fin_ftemp2 CHAR(2); min_fin_ftemp2 CHAR(2); sec_fin_ftemp2 CHAR(2); mese_comp CHAR(7); n_rec integer := 0; proc_name constant varchar2(30) := 'CALCOLO_SLA1_REC_VIRT'; D_ini DATE; D_fine DATE; eventi NUMBER; CURSOR eventi_attesi is SELECT COUNT(*) AS eventiAttesi ,'TIMG' as recipientRete , 'TIMG' as donatingRete ,a.CODICE_OPERATORE_DONATING as donorEffettivo ,a.codice_operatore_recipient as recipientEffettivo FROM mnp.MNP_GEST_RICH_REC_VIRT a ,mnp.MNP_STORICO_RICH_REC_VIRT sto WHERE a.id_richiesta = sto.id_richiesta AND sto.stato_a = 2 AND sto.data_i_o BETWEEN temp_data_in_att AND temp_data_fin_att GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING; CURSOR eventi_in_sla is SELECT COUNT(*) AS eventiSLA ,'TIMG' as recipientRete , 'TIMG' as donatingRete ,a.CODICE_OPERATORE_DONATING as donorEffettivo ,a.codice_operatore_recipient as recipientEffettivo FROM mnp.MNP_GEST_RICH_REC_VIRT a ,mnp.MNP_STORICO_RICH_REC_VIRT sto_in ,mnp.MNP_STORICO_RICH_REC_VIRT sto_fin WHERE a.id_richiesta = sto_in.id_richiesta AND a.id_richiesta = sto_fin.id_richiesta AND sto_in.stato_a = 2 AND sto_fin.stato_a IN (6,7) AND sto_in.data_i_o BETWEEN temp_data_in_att AND temp_data_fin_att AND sto_fin.data_i_o BETWEEN temp_data_in_val AND temp_data_fin_val GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING; BEGIN cod_errore := 0; ora_fin_ftemp1 := null; min_fin_ftemp1 := null; sec_fin_ftemp1 := null; ora_fin_ftemp2 := null; min_fin_ftemp2 := null; sec_fin_ftemp2 := null; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); /*il mese di competenza viene impostato sull'evento finale*/ mese_comp:= TO_CHAR (dwh.FUN_GIORNI_MENO (dataRif,1),'mm/yyyy'); SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp1,min_fin_ftemp1,sec_fin_ftemp1 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 1; -- per pic presa dal nome file out non sono previsti i 15 minuti SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 2 AND TIPO_OPERATORE = 'MVNO'; --carico gli eventi attesi per std/MVNO --calcolo l'intervallo di 24h dalla chiusura finestra del giorno precedente, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_att:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),3); temp_data_fin_att:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),2); FOR rec IN eventi_attesi LOOP n_rec := n_rec +1; INSERT INTO MNP_DW_SLA_FRANCHIGIA_OUT ( TIPO_EVENTO, DATA_EVENTO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DONOR_RETE, RECIPIENT_RETE, EVENTI_ATTESI, PROCESSO,MESE_COMP_FINALE) VALUES ( 'SLA1' ,trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donatingRete ,rec.recipientRete ,rec.eventiAttesi ,'V' ,mese_comp ); END LOOP; --aggiorno gli eventi in SLA --calcolo l'intervallo di pic da inizio giornata, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_val:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||'00' ||'00'||'01'),'YYYYMMDDHH24MISS'),1); temp_data_fin_val:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS'),1); FOR rec IN eventi_in_SLA LOOP UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_IN_SLA = rec.eventiSLA WHERE TIPO_EVENTO = 'SLA1' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC); EXCEPTION WHEN OTHERS THEN if eventi_attesi%ISOPEN then CLOSE eventi_attesi; end if; if eventi_in_sla%ISOPEN then CLOSE eventi_in_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CALCOLO_SLA1_REC_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CALCOLO_SLA1_REC_VIRT; procedure CALCOLO_SLA2_REC_VIRT(dataRif IN DATE,cod_errore OUT NUMBER) IS temp_data_in_esp DATE; temp_data_fin_esp DATE; temp_data_in_val DATE; temp_data_fin_val DATE; ora_fin_ftemp1 CHAR(2); min_fin_ftemp1 CHAR(2); sec_fin_ftemp1 CHAR(2); ora_fin_ftemp2 CHAR(2); min_fin_ftemp2 CHAR(2); sec_fin_ftemp2 CHAR(2); mese_comp CHAR(7); n_rec integer := 0; proc_name constant varchar2(30) := 'CALCOLO_SLA2_REC_VIRT'; D_ini DATE; D_fine DATE; eventi NUMBER; CURSOR eventi_attesi is SELECT COUNT(*) AS eventiAttesi ,'TIMG' as recipientRete , 'TIMG' as donatingRete ,a.CODICE_OPERATORE_DONATING as donorEffettivo ,a.codice_operatore_recipient as recipientEffettivo FROM mnp.MNP_GEST_RICH_REC_VIRT a ,mnp.MNP_STORICO_RICH_REC_VIRT sto WHERE a.id_richiesta = sto.id_richiesta AND sto.stato_a = 6 AND sto.data_i_o BETWEEN temp_data_in_val AND temp_data_fin_val GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING; CURSOR eventi_in_sla is SELECT COUNT(*) AS eventiSLA ,'TIMG' as recipientRete , 'TIMG' as donatingRete ,a.CODICE_OPERATORE_DONATING as donorEffettivo ,a.codice_operatore_recipient as recipientEffettivo FROM mnp.MNP_GEST_RICH_REC_VIRT a ,mnp.MNP_STORICO_RICH_REC_VIRT sto_in ,mnp.MNP_STORICO_RICH_REC_VIRT sto_fin WHERE a.id_richiesta = sto_in.id_richiesta AND a.id_richiesta = sto_fin.id_richiesta AND sto_in.stato_a = 6 AND sto_fin.stato_a =10 AND sto_in.data_i_o BETWEEN temp_data_in_val AND temp_data_fin_val AND sto_fin.data_i_o BETWEEN temp_data_in_esp AND temp_data_fin_esp GROUP BY a.CODICE_OPERATORE_RECIPIENT, a.CODICE_OPERATORE_DONATING; BEGIN cod_errore := 0; ora_fin_ftemp1 := null; min_fin_ftemp1 := null; sec_fin_ftemp1 := null; ora_fin_ftemp2 := null; min_fin_ftemp2 := null; sec_fin_ftemp2 := null; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); /*il mese di competenza viene impostato sull'evento finale*/ mese_comp:= TO_CHAR (dwh.FUN_GIORNI_MENO (dataRif,1),'mm/yyyy'); SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp1,min_fin_ftemp1,sec_fin_ftemp1 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 2 AND TIPO_OPERATORE = 'MVNO'; -- per pic presa dal nome file out non sono previsti i 15 minuti SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 6; --carico gli eventi attesi per std/MVNO --calcolo l'intervallo di 24h dalla chiusura finestra del giorno precedente, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_val:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),4); temp_data_fin_val:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),3); FOR rec IN eventi_attesi LOOP n_rec := n_rec +1; INSERT INTO MNP_DW_SLA_FRANCHIGIA_OUT ( TIPO_EVENTO, DATA_EVENTO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DONOR_RETE, RECIPIENT_RETE, EVENTI_ATTESI, PROCESSO,MESE_COMP_FINALE) VALUES ( 'SLA2' ,trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donatingRete ,rec.recipientRete ,rec.eventiAttesi ,'V' ,mese_comp ); END LOOP; --aggiorno gli eventi in SLA --calcolo l'intervallo di pic da inizio giornata, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_esp:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||'00' ||'00'||'01'),'YYYYMMDDHH24MISS'),1); temp_data_fin_esp:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS'),1); FOR rec IN eventi_in_SLA LOOP UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_IN_SLA = rec.eventiSLA WHERE TIPO_EVENTO = 'SLA2' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC); EXCEPTION WHEN OTHERS THEN if eventi_attesi%ISOPEN then CLOSE eventi_attesi; end if; if eventi_in_sla%ISOPEN then CLOSE eventi_in_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CALCOLO_SLA2_REC_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CALCOLO_SLA2_REC_VIRT; procedure CALCOLO_SLA3_REC_VIRT(dataRif IN DATE,cod_errore OUT NUMBER) IS temp_data_in_esp DATE; temp_data_fin_esp DATE; temp_data_in_por DATE; temp_data_fin_por DATE; ora_fin_ftemp1 CHAR(2); min_fin_ftemp1 CHAR(2); sec_fin_ftemp1 CHAR(2); ora_fin_ftemp2 CHAR(2); min_fin_ftemp2 CHAR(2); sec_fin_ftemp2 CHAR(2); mese_comp CHAR(7); n_rec integer := 0; proc_name constant varchar2(30) := 'CALCOLO_SLA3_REC_VIRT'; D_ini DATE; D_fine DATE; eventi NUMBER; CURSOR eventi_attesi is SELECT COUNT(*) AS eventiAttesi ,'TIMG' as recipientRete ,xml_out.destinatario as donatingRete ,a.CODICE_OPERATORE_DONATING as donorEffettivo ,a.codice_operatore_recipient as recipientEffettivo FROM mnp.mnp_gest_rich_rec_virt a ,mnp.mnp_xml_richiesta_out rich_out ,mnp.mnp_xml_out xml_out ,mnp.mnp_xml_ack_in ack_in WHERE xml_out.tipo_file = 3 AND rich_out.id_richiesta = a.id_richiesta AND xml_out.nome_file = rich_out.nome_file AND ack_in.nome_file_riferito = rich_out.nome_file AND xml_out.destinatario <> 'TIMG' AND to_date( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_por AND temp_data_fin_por GROUP BY a.CODICE_OPERATORE_RECIPIENT, xml_out.destinatario,a.codice_operatore_donating; CURSOR eventi_in_sla is SELECT COUNT(*) AS eventiSLA ,'TIMG' as recipientRete ,xml_out_por.destinatario as donatingRete ,a.CODICE_OPERATORE_DONATING as donorEffettivo ,a.codice_operatore_recipient as recipientEffettivo FROM mnp.mnp_gest_rich_rec_virt a ,mnp.mnp_xml_in xml_in_esp ,mnp.mnp_xml_richiesta_in rich_in_esp ,mnp.mnp_xml_ack_out ack_out_esp ,mnp.mnp_xml_out xml_out_por ,mnp.mnp_xml_richiesta_out rich_out_por ,mnp.mnp_xml_ack_in ack_in_por WHERE xml_in_esp.tipo_file = 6 AND rich_in_esp.id_richiesta = a.id_richiesta AND ack_out_esp.nome_file_riferito = rich_in_esp.nome_file AND xml_in_esp.nome_file = rich_in_esp.nome_file AND xml_out_por.tipo_file = 3 AND rich_out_por.id_richiesta = rich_in_esp.id_richiesta AND xml_out_por.nome_file = rich_out_por.nome_file AND ack_in_por.nome_file_riferito = rich_out_por.nome_file AND xml_out_por.destinatario= xml_in_esp.MITTENTE AND xml_in_esp.mittente <> a.codice_operatore_donating AND to_date( SUBSTR( ack_in_por.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_por AND temp_data_fin_por AND to_date( SUBSTR( ack_out_esp.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN temp_data_in_esp AND temp_data_fin_esp GROUP BY a.CODICE_OPERATORE_RECIPIENT, xml_out_por.destinatario,a.CODICE_OPERATORE_donating; BEGIN cod_errore := 0; ora_fin_ftemp1 := null; min_fin_ftemp1 := null; sec_fin_ftemp1 := null; ora_fin_ftemp2 := null; min_fin_ftemp2 := null; sec_fin_ftemp2 := null; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); /*il mese di competenza viene impostato sull'evento finale*/ mese_comp:= TO_CHAR (dwh.FUN_GIORNI_MENO (dataRif,1),'mm/yyyy'); SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp1,min_fin_ftemp1,sec_fin_ftemp1 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 3; -- per pic presa dal nome file out non sono previsti i 15 minuti SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 6; --carico gli eventi attesi per std/MVNO --calcolo l'intervallo di 24h dalla chiusura finestra del giorno precedente, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_por:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),4); temp_data_fin_por:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS'),3); FOR rec IN eventi_attesi LOOP n_rec := n_rec +1; INSERT INTO MNP_DW_SLA_FRANCHIGIA_OUT ( TIPO_EVENTO, DATA_EVENTO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DONOR_RETE, RECIPIENT_RETE, EVENTI_ATTESI, PROCESSO,MESE_COMP_FINALE) VALUES ( 'SLA3' ,trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donatingRete ,rec.recipientRete ,rec.eventiAttesi ,'V' ,mese_comp ); END LOOP; --aggiorno gli eventi in SLA per std/MVNO --calcolo l'intervallo di pic da inizio giornata, alla chiusura finestra del giorno corrente di determinazione eventi temp_data_in_esp:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||'00' ||'00'||'01'),'YYYYMMDDHH24MISS'),1); temp_data_fin_esp:= dwh.FUN_GIORNI_MENO(TO_DATE((TO_CHAR (dataRif, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS'),1); FOR rec IN eventi_in_SLA LOOP UPDATE MNP_DW_SLA_FRANCHIGIA_OUT SET EVENTI_IN_SLA = rec.eventiSLA WHERE TIPO_EVENTO = 'SLA3' AND DATA_EVENTO = trunc(dwh.FUN_GIORNI_MENO (dataRif,1)) AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo AND DONOR_RETE = rec.donatingRete; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC); EXCEPTION WHEN OTHERS THEN if eventi_attesi%ISOPEN then CLOSE eventi_attesi; end if; if eventi_in_sla%ISOPEN then CLOSE eventi_in_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CALCOLO_SLA3_REC_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CALCOLO_SLA3_REC_VIRT; procedure CALCOLO_SLA_FRANCHIGIA(dataRif IN Date) IS cod_errore NUMBER (1); cod_errore_sla0_don NUMBER (1):=0; cod_errore_sla1_don NUMBER (1):=0; cod_errore_sla2_don NUMBER (1):=0; cod_errore_sla3_don NUMBER (1):=0; cod_errore_sla0_rec NUMBER (1):=0; cod_errore_sla1_rec NUMBER (1):=0; cod_errore_sla2_rec NUMBER (1):=0; cod_errore_sla3_rec NUMBER (1):=0; cod_errore_sla1_don_virt NUMBER (1):=0; cod_errore_sla2_don_virt NUMBER (1):=0; cod_errore_sla3_don_virt NUMBER (1):=0; cod_errore_sla1_rec_virt NUMBER (1):=0; cod_errore_sla2_rec_virt NUMBER (1):=0; cod_errore_sla3_rec_virt NUMBER (1):=0; n_rec integer := 0; proc_name constant varchar2(30) := 'CALCOLO_SLA_FRANCHIGIA'; D_ini DATE; D_fine DATE; dataRif1 DATE; BEGIN --dbms_output.enable(9999999); D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: INIZIO PROCESSO '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); ----------------------------------------------------- -- VERIFICO SE DATA_RIF E' FERIALE. SE E' FESTIVO NON FACCIO NULLA ----------------------------------------------------- IF FUN_DATE_FESTIVE(dataRif) = dataRif THEN BEGIN ----------------------------------------------------- -- VOGLIO CALCOLARE TUTTI GLI EVENTI CHE FANNO RIFERIMENTO AL GIORNO LAVORATIVO ANTERIORE A DATA RIF -- EFFETTUO UNA DELETE PREVENTIVA DELLE TABELLA FRANCHIGIA PER LA GIORNATA DI INTERESSE ----------------------------------------------------- dataRif1 := FUN_GIORNI_MENO (dataRif,1); DELETE MNP_DW_SLA_FRANCHIGIA_OUT WHERE TO_CHAR(DATA_EVENTO,'dd/mm/yyyy')=TO_CHAR(dataRif1,'dd/mm/yyyy'); cod_errore := 0; -- caricamento dati per il processo donor nella tabella MNP_DW_SLA_FRANCHIGIA_OUT calcolo_sla0_donor(dataRif,cod_errore_sla0_don); calcolo_sla1_donor(dataRif,cod_errore_sla1_don); calcolo_sla2_donor(dataRif,cod_errore_sla2_don); calcolo_sla3_donor(dataRif,cod_errore_sla3_don); -- caricamento dati per il processo recipient nella tabella MNP_DW_SLA_FRANCHIGIA_OUT calcolo_sla0_recipient(dataRif,cod_errore_sla0_rec); calcolo_sla1_recipient(dataRif,cod_errore_sla1_rec); calcolo_sla2_recipient(dataRif,cod_errore_sla2_rec); calcolo_sla3_recipient(dataRif,cod_errore_sla3_rec); -- caricamento dati per il processo donor virtuale nella tabella MNP_DW_SLA_FRANCHIGIA_OUT calcolo_sla1_donor_virt(dataRif,cod_errore_sla1_don_virt); calcolo_sla2_donor_virt(dataRif,cod_errore_sla2_don_virt); calcolo_sla3_donor_virt(dataRif,cod_errore_sla3_don_virt); -- caricamento dati per il processo recipient virtuale nella tabella MNP_DW_SLA_FRANCHIGIA_OUT calcolo_sla1_rec_virt(dataRif,cod_errore_sla1_rec_virt); calcolo_sla2_rec_virt(dataRif,cod_errore_sla2_rec_virt); calcolo_sla3_rec_virt(dataRif,cod_errore_sla3_rec_virt); ----------------------------------------------------- -- CALCOLO IL NUMERO 'EVENTI FUORI SLA' E A PERCENTUALE DI FRANCHIGIA PER -- TUTTI I RECORD INSERITI ----------------------------------------------------- UPDATE dwh.mnp_dw_sla_franchigia_out SET eventi_fuori_sla = eventi_attesi - eventi_in_sla ,percentuale_fuori_sla = round(((eventi_attesi - eventi_in_sla)/eventi_attesi)*100) ,data_agg = sysdate WHERE data_agg is null; cod_errore := cod_errore_sla0_don + cod_errore_sla1_don+cod_errore_sla2_don +cod_errore_sla3_don + cod_errore_sla0_rec + cod_errore_sla1_rec + cod_errore_sla2_rec + cod_errore_sla3_rec + cod_errore_sla1_rec_virt + cod_errore_sla2_rec_virt + cod_errore_sla3_rec_virt + cod_errore_sla1_don_virt + cod_errore_sla2_don_virt + cod_errore_sla3_don_virt; IF cod_errore = 0 THEN -- tutto a posto DBMS_OUTPUT.put_line ('Caricamento dati e calcolo SLA avvenuto.'); ELSE -- tutto na sola DBMS_OUTPUT.put_line ('CARICAMENTO DATI E CALCOLO SLA PARZIALE: PROCESSO TERMINATO CON ERRORI VERIFICARE LOG!'); END IF; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_FRANCHIGIA: FINE PROCESSO '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)); EXCEPTION WHEN OTHERS THEN cod_errore := 1; DBMS_OUTPUT.put_line ('Errore nel caricamento dati e calcolo Sla ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END; END IF; END CALCOLO_SLA_FRANCHIGIA; END PKG_CALCOLO_SLA_FRANCHIGIA; /