CREATE OR REPLACE PACKAGE PKG_CALCOLO_SLA_PENALI_3GG AS /****************************************************************************** NAME: PKG_CALCOLO_SLA_PENALI_3GG PURPOSE: REVISIONS: Ver Date Author Description --------- ---------- --------------- ------------------------------------ 1.0 11/03/2010 1. Created this package. ******************************************************************************/ PROCEDURE CARICAMENTO_SLA0_RECIPIENT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CARICAMENTO_SLA1_RECIPIENT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CARICAMENTO_SLA2_RECIPIENT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CARICAMENTO_SLA3_RECIPIENT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CARICAMENTO_SLA0_DONOR (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CARICAMENTO_SLA1_DONOR (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CARICAMENTO_SLA2_DONOR (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CARICAMENTO_SLA3_DONOR (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CARICAMENTO_SLA1_DONOR_VIRT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CARICAMENTO_SLA2_DONOR_VIRT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CARICAMENTO_SLA3_DONOR_VIRT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CARICAMENTO_SLA1_REC_VIRT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CARICAMENTO_SLA2_REC_VIRT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CARICAMENTO_SLA3_REC_VIRT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CARICAMENTO_SLA1_REC_VIRT_M2M (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CARICAMENTO_SLA2_REC_VIRT_M2M (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CARICAMENTO_SLA3_REC_VIRT_M2M (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CALCOLO_SLA_PENALI(dataRif IN DATE); END PKG_CALCOLO_SLA_PENALI_3GG; / CREATE OR REPLACE package body PKG_CALCOLO_SLA_PENALI_3GG as procedure CARICAMENTO_SLA0_RECIPIENT(dataRif IN DATE,cod_errore OUT NUMBER) IS temp_data_in DATE; temp_data_fin DATE; ackInizialeLetto VARCHAR2(27); flagCalcoloNumSim NUMBER(1):=0; 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); n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA0_RECIPIENT'; D_ini DATE; D_fine DATE; penale NUMBER; giorni_ritardo NUMBER; numero_sim NUMBER; dataFinale DATE; CURSOR record_sla IS SELECT rich_out.ID_RICHIESTA AS idRichiesta ,'SLA0' AS tipoMessaggio ,rich_rec.CODICE_OPERATORE_DON_EFF AS donorEffettivo ,rich_rec.CODICE_OPERATORE_REC_EFF AS recipientEffettivo ,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio ,rich_rec.CODICE_OPERATORE_DONATING AS donorRete ,rich_rec.CODICE_OPERATORE_RECIPIENT AS recipientRete ,NULL AS terzaParte ,xml_out.TIPO_PROCESSO AS processo ,rich_rec.RICHIESTAADHOCAOM AS richiestaAdHocAom ,rich_rec.codice_gruppo AS codiceGruppo ,ack_out.NOME_FILE AS nomeFile ,to_date( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tIniziale ,to_date( SUBSTR(ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tFinale ,rich_rec.DATA_CUT_OVER_CALC AS dataCutOver ,rich_rec.MSISDN AS msIsdn ,ack_in.NOME_FILE AS ackIniziale ,ack_out.NOME_FILE AS ackFinale --,TO_DATE( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) -- AS dataAttesaEventoFin ,TO_CHAR ( TO_DATE( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') AS meseCompFinale ,xml_out.NOME_FILE AS nomeFileIniziale ,xml_in.NOME_FILE AS nomeFileFinale ,to_date( SUBSTR( RICH_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataRicIn FROM mnp.MNP_XML_RICHIESTA_OUT rich_out ,mnp.MNP_XML_ACK_IN ack_in ,mnp.MNP_XML_OUT xml_out ,mnp.MNP_XML_ACK_OUT ack_out ,mnp.MNP_XML_IN xml_in ,mnp.MNP_XML_RICHIESTA_IN RICH_in ,mnp.MNP_GESTIONE_RICHIESTA_REC RICH_rec WHERE rich_out.NOME_FILE = xml_out.NOME_FILE AND xml_in.NOME_FILE = rich_in.NOME_FILE ------calcolo pic AND xml_in.TIPO_FILE = 5 AND ack_out.NOME_FILE_RIFERITO = rich_in.NOME_FILE AND ack_in.NOME_FILE_RIFERITO = rich_out.NOME_FILE AND xml_out.TIPO_FILE =1 ----ATTIVAZIONE AND rich_rec.ID_RICHIESTA = rich_in.ID_RICHIESTA AND rich_out.ID_RICHIESTA = rich_in.ID_RICHIESTA AND rich_rec.STATO = 5 AND to_date( SUBSTR( ack_out.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)) ; BEGIN temp_data_in := NULL; temp_data_fin := NULL; 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_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); -- RICAVA FINESTRE TEMPORALI PER TIPO FILE 1 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 5 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; cod_errore := 0; FOR rec IN record_sla LOOP n_rec := n_rec +1; -- SE IL FILE '1' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE, IMPOSTA T_INIZIALE AL GIORNO LAVORATIVO SUCCESSIVO IF rec.tIniziale > TO_DATE ((TO_CHAR (rec.tIniziale, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS') THEN temp_data_in := dwh.FUN_GIORNI_PIU(rec.tIniziale, 1); ELSE temp_data_in := rec.tIniziale; END IF; -- SE IL FILE '5' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE, IMPOSTA T_FINALE AL GIORNO LAVORATIVO SUCCESSIVO IF rec.tFinale > TO_DATE ((TO_CHAR (rec.dataRicIn, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS') THEN temp_data_fin := rec.dataRicIn; ELSE temp_data_fin := rec.tFinale; END IF; -- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO IF TRIM(rec.codiceGruppo) IS NOT NULL AND rec.richiestaAdHocAom > 0 THEN flagCalcoloNumSim:=1; ELSE flagCalcoloNumSim:=0; END IF; if FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc(temp_data_in)) -1 > 0 then begin dataFinale:=fun_giorni_piu(temp_data_in,0); /*data attesa evento finale */ --giorni_ritardo := TRUNC(temp_data_fin- fun_giorni_piu(temp_data_in,0) ); giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); penale:= giorni_ritardo *50; if flagCalcoloNumSim = 1 THEN SELECT COUNT(*) INTO numero_sim FROM mnp.mnp_gestione_richiesta_rec c WHERE c.CODICE_GRUPPO=rec.codiceGruppo AND c.RICHIESTAADHOCAOM > 0; ELSE numero_sim := 0; END IF; INSERT INTO MNP_DW_SLA_3GG_OUT ( ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE, RECIPIENT_RETE, TERZA_PARTE, PROCESSO, FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE, T_FINALE, DATA_CUT_OVER, MSISDN, ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN, MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME) VALUES ( rec.idRichiesta ,rec.tipoMessaggio ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.dataMessaggio ,rec.donorRete ,rec.recipientRete ,rec.terzaParte ,rec.processo ,flagCalcoloNumSim ,rec.nomeFile ,temp_data_in ,temp_data_fin ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,giorni_ritardo ,penale ,numero_sim,proc_name ); EXCEPTION WHEN dup_val_on_index THEN BEGIN -- lettura dati preesistenti SELECT ACK_INIZIALE INTO ackInizialeLetto FROM MNP_DW_SLA_3GG_OUT WHERE ID_RICHIESTA = rec.idRichiesta AND TIPO_MESSAGGIO = rec.tipoMessaggio AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo; -- se data dell'ack della nuova riga < data ack preesistente aggiorna i dati altrimenti scarta IF to_date( SUBSTR( rec.ackIniziale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(ackInizialeLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ) THEN UPDATE MNP_DW_SLA_3GG_OUT SET DATA_MESSAGGIO = rec.dataMessaggio ,DONOR_RETE = rec.donorRete ,RECIPIENT_RETE = rec.recipientRete ,TERZA_PARTE = rec.terzaParte ,PROCESSO = rec.processo ,FLAG_CALCOLO_NUMSIM = flagCalcoloNumSim ,NOME_FILE = rec.nomeFile ,T_INIZIALE=temp_data_in ,T_FINALE=temp_data_fin ,DATA_CUT_OVER=rec.dataCutOver ,MSISDN=rec.msIsdn ,ACK_INIZIALE=rec.ackIniziale ,ACK_FINALE=rec.ackFinale ,DATA_ATTESA_EVENTO_FIN=dataFinale ,MESE_COMP_FINALE=rec.meseCompFinale ,NOME_FILE_INIZIALE=rec.nomeFileIniziale ,NOME_FILE_FINALE=rec.nomeFileFinale ,NUMERO_GIORNI_RITARDO=giorni_ritardo ,PENALE=penale ,PROC_NAME=proc_name WHERE ID_RICHIESTA = rec.idRichiesta AND TIPO_MESSAGGIO = rec.tipoMessaggio AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo; END IF; END; end; END IF; END LOOP; COMMIT; D_finE:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: 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 record_sla%ISOPEN then CLOSE record_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA0_RECIPIENT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLA0_RECIPIENT; procedure CARICAMENTO_SLA1_RECIPIENT(dataRif IN DATE,cod_errore OUT NUMBER) IS temp_data_in DATE; temp_data_fin DATE; ackInizialeLetto VARCHAR2(27); flagCalcoloNumSim NUMBER(1):=0; 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); n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA1_RECIPIENT'; D_ini DATE; D_fine DATE; dataFinale DATE; penale NUMBER; giorni_ritardo NUMBER; numero_sim NUMBER; CURSOR record_sla is SELECT rich_out.ID_RICHIESTA AS idRichiesta ,'SLA1' AS tipoMessaggio ,rich_rec.CODICE_OPERATORE_DON_EFF AS donorEffettivo ,rich_rec.CODICE_OPERATORE_REC_EFF AS recipientEffettivo ,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio ,rich_rec.CODICE_OPERATORE_DONATING AS donorRete ,rich_rec.CODICE_OPERATORE_RECIPIENT AS recipientRete ,NULL AS terzaParte ,xml_out.TIPO_PROCESSO AS processo ,rich_rec.RICHIESTAADHOCAOM AS richiestaAdHocAom ,rich_rec.codice_gruppo AS codiceGruppo ,ack_out.NOME_FILE AS nomeFile ,to_date( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tIniziale ,to_date( SUBSTR(ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tFinale ,rich_rec.DATA_CUT_OVER_CALC AS dataCutOver ,rich_rec.MSISDN AS msIsdn ,ack_in.NOME_FILE AS ackIniziale ,ack_out.NOME_FILE AS ackFinale --,TO_DATE( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) + 1 -- AS dataAttesaEventoFin ,TO_CHAR ( TO_DATE( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') AS meseCompFinale ,xml_out.NOME_FILE AS nomeFileIniziale ,xml_in.NOME_FILE AS nomeFileFinale ,to_date( SUBSTR( RICH_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataRicIn FROM mnp.MNP_XML_RICHIESTA_OUT rich_out, mnp.MNP_XML_ACK_IN ack_in , mnp.MNP_XML_OUT xml_out , mnp.MNP_XML_ACK_OUT ack_out , mnp.MNP_XML_RICHIESTA_IN rich_in , mnp.MNP_XML_IN xml_in , mnp.MNP_GESTIONE_RICHIESTA_REC rich_rec WHERE rich_out.NOME_FILE = xml_out.NOME_FILE AND ack_in.NOME_FILE_RIFERITO = rich_out.NOME_FILE AND xml_in.NOME_FILE =RICH_in.NOME_FILE AND xml_out.TIPO_FILE = 1 ---ATTIVAZIONE AND xml_in.NOME_FILE = rich_in.NOME_FILE AND ack_out.NOME_FILE_RIFERITO = rich_in.NOME_FILE AND xml_in.TIPO_FILE =2 ----validazione AND rich_out.ID_RICHIESTA = rich_in.ID_RICHIESTA AND rich_rec.ID_RICHIESTA = rich_in.ID_RICHIESTA AND to_date( SUBSTR( ack_out.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS(dataRif,-1)); BEGIN cod_errore := 0; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); ora_fin_ftemp1 := null; min_fin_ftemp1 := null; sec_fin_ftemp1 := null; ora_fin_ftemp2 := null; min_fin_ftemp2 := null; sec_fin_ftemp2 := null; 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; 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; FOR rec IN record_sla LOOP n_rec := n_rec +1; IF rec.tIniziale > TO_DATE ((TO_CHAR (rec.tIniziale, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS') THEN temp_data_in := dwh.FUN_GIORNI_PIU(rec.tIniziale, 1); ELSE temp_data_in := rec.tIniziale; END IF; IF rec.tFinale > TO_DATE ((TO_CHAR (rec.dataRicIn, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS') THEN temp_data_fin := rec.dataRicIn; ELSE temp_data_fin := rec.tFinale; END IF; -- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO IF TRIM(rec.codiceGruppo) IS NOT NULL AND rec.richiestaAdHocAom > 0 THEN flagCalcoloNumSim:=1; ELSE flagCalcoloNumSim:=0; END IF; if FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc(temp_data_in)) -1 >1 then BEGIN dataFinale:=fun_giorni_piu(temp_data_in,1); /*data attesa evento finale*/ --giorni_ritardo := TRUNC(temp_data_fin- fun_giorni_piu(temp_data_in,1) ); giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); penale:= giorni_ritardo *50; if flagCalcoloNumSim = 1 THEN SELECT COUNT(*) INTO numero_sim FROM mnp.mnp_gestione_richiesta_rec c WHERE c.CODICE_GRUPPO=rec.codiceGruppo AND c.RICHIESTAADHOCAOM > 0; ELSE numero_sim := 0; END IF; INSERT INTO MNP_DW_SLA_3GG_OUT ( ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE, RECIPIENT_RETE, TERZA_PARTE, PROCESSO, FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE, T_FINALE, DATA_CUT_OVER, MSISDN, ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN, MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME) VALUES ( rec.idRichiesta ,rec.tipoMessaggio ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.dataMessaggio ,rec.donorRete ,rec.recipientRete ,rec.terzaParte ,rec.processo ,flagCalcoloNumSim ,rec.nomeFile ,temp_data_in ,temp_data_fin ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,giorni_ritardo ,penale ,numero_sim ,proc_name ); EXCEPTION WHEN dup_val_on_index THEN BEGIN -- lettura dati preesistenti SELECT ACK_INIZIALE INTO ackInizialeLetto FROM MNP_DW_SLA_3GG_OUT WHERE ID_RICHIESTA = rec.idRichiesta AND TIPO_MESSAGGIO = rec.tipoMessaggio AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo; -- se data dell'ack della nuova riga < data ack preesistente aggiorna i dati altrimenti scarta IF to_date( SUBSTR( rec.ackIniziale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(ackInizialeLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ) THEN UPDATE MNP_DW_SLA_3GG_OUT SET DATA_MESSAGGIO = rec.dataMessaggio ,DONOR_RETE = rec.donorRete ,RECIPIENT_RETE = rec.recipientRete ,TERZA_PARTE = rec.terzaParte ,PROCESSO = rec.processo ,FLAG_CALCOLO_NUMSIM = flagCalcoloNumSim ,NOME_FILE = rec.nomeFile ,T_INIZIALE=temp_data_in ,T_FINALE=temp_data_fin ,DATA_CUT_OVER=rec.dataCutOver ,MSISDN=rec.msIsdn ,ACK_INIZIALE=rec.ackIniziale ,ACK_FINALE=rec.ackFinale ,DATA_ATTESA_EVENTO_FIN=dataFinale ,MESE_COMP_FINALE=rec.meseCompFinale ,NOME_FILE_INIZIALE=rec.nomeFileIniziale ,NOME_FILE_FINALE=rec.nomeFileFinale ,NUMERO_GIORNI_RITARDO=giorni_ritardo ,PENALE=penale ,NUMERO_SIM=numero_sim ,PROC_NAME=proc_name WHERE ID_RICHIESTA = rec.idRichiesta AND TIPO_MESSAGGIO = rec.tipoMessaggio AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo; END IF; END; END; END IF; END LOOP; COMMIT; D_finE:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: 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 record_sla%ISOPEN then CLOSE record_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA1_RECIPIENT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLA1_RECIPIENT; procedure CARICAMENTO_SLA2_RECIPIENT(dataRif IN DATE,cod_errore OUT NUMBER) IS ackInizialeLetto VARCHAR2(27); flagCalcoloNumSim NUMBER(1):=0; temp_data_fin DATE; ora_fin_ftemp CHAR(2); min_fin_ftemp CHAR(2); sec_fin_ftemp CHAR(2); n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA2_RECIPIENT'; D_ini DATE; D_fine DATE; dataFinale DATE; penale NUMBER; giorni_ritardo NUMBER; numero_sim NUMBER; CURSOR record_sla is SELECT rich_in.ID_RICHIESTA AS idRichiesta ,'SLA2' AS tipoMessaggio ,rich_rec.CODICE_OPERATORE_DON_EFF AS donorEffettivo ,rich_rec.CODICE_OPERATORE_REC_EFF AS recipientEffettivo ,to_date( SUBSTR( ack_out_fin.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio ,rich_rec.CODICE_OPERATORE_DONATING AS donorRete ,rich_rec.CODICE_OPERATORE_RECIPIENT AS recipientRete ,NULL as terzaParte ,xml_out.TIPO_PROCESSO AS processo ,rich_rec.RICHIESTAADHOCAOM AS richiestaAdHocAom ,rich_rec.codice_gruppo AS codiceGruppo ,ack_out_fin.NOME_FILE as nomeFile ,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tIniziale ,to_date( SUBSTR( ack_out_fin.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tFinale ,rich_rec.DATA_CUT_OVER_CALC AS dataCutOver ,rich_rec.MSISDN AS msIsdn ,ack_out.NOME_FILE AS ackIniziale ,ack_out_fin.NOME_FILE AS ackFinale --,TO_DATE( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' )+2 AS dataAttesaEventoFin ,TO_CHAR ( TO_DATE( SUBSTR( ack_out_fin.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') AS meseCompFinale ,xml_in.NOME_FILE AS nomeFileIniziale ,xml_in_fin.NOME_FILE AS nomeFileFinale ,to_date( SUBSTR( RICH_in_fin.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataRicIn FROM mnp.MNP_XML_ACK_OUT ack_out , mnp.MNP_XML_IN xml_in , mnp.MNP_XML_RICHIESTA_IN RICH_in , mnp.MNP_GESTIONE_RICHIESTA_REC RICH_rec, mnp.MNP_XML_ACK_OUT ack_out_fin , mnp.MNP_XML_IN xml_in_fin , mnp.MNP_XML_RICHIESTA_IN rich_in_fin , mnp.MNP_XML_OUT xml_out WHERE xml_in.NOME_FILE = rich_in.NOME_FILE AND ack_out.NOME_FILE_RIFERITO = rich_in.NOME_FILE AND ack_out.NOME_FILE = xml_out.nome_file AND xml_in.TIPO_FILE =2----VALIDAZIONE AND RICH_rec.ID_RICHIESTA = RICH_in.ID_RICHIESTA --AND RICH_rec.STATO = 8 AND xml_in_fin.NOME_FILE = rich_in_fin.NOME_FILE AND ack_out_fin.NOME_FILE_RIFERITO = rich_in_fin.NOME_FILE AND xml_in_fin.TIPO_FILE =6----espletamento AND RICH_rec.CODICE_OPERATORE_DONATING= xml_in_fin.MITTENTE AND rich_rec.ID_RICHIESTA = RICH_in_fin.ID_RICHIESTA AND to_date( SUBSTR( ack_out_fin.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)) ; BEGIN cod_errore := 0; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_ini,'YYYY-MM-DD HH24:MI:SS')); ora_fin_ftemp := null; min_fin_ftemp := null; sec_fin_ftemp := null; SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp,min_fin_ftemp,sec_fin_ftemp FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 6; FOR rec IN record_sla LOOP n_rec := n_rec +1; IF rec.tFinale > TO_DATE ((TO_CHAR (rec.dataRicIn, 'YYYYMMDD')||ora_fin_ftemp ||min_fin_ftemp||sec_fin_ftemp),'YYYYMMDDHH24MISS') THEN temp_data_fin := rec.dataRicIn; ELSE temp_data_fin := rec.tFinale; END IF; -- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO IF TRIM(rec.codiceGruppo) IS NOT NULL AND rec.richiestaAdHocAom > 0 THEN flagCalcoloNumSim:=1; ELSE flagCalcoloNumSim:=0; END IF; IF FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc(rec.tIniziale)) -1 >2 THEN BEGIN dataFinale:=fun_giorni_piu(rec.tIniziale,2); --giorni_ritardo := TRUNC(temp_data_fin- fun_giorni_piu(rec.tIniziale,2) ); giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); penale:= giorni_ritardo *50; if flagCalcoloNumSim = 1 THEN SELECT COUNT(*) INTO numero_sim FROM mnp.mnp_gestione_richiesta_rec c WHERE c.CODICE_GRUPPO=rec.codiceGruppo AND c.RICHIESTAADHOCAOM > 0; ELSE numero_sim := 0; END IF; begin INSERT INTO MNP_DW_SLA_3GG_OUT ( ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE, RECIPIENT_RETE, TERZA_PARTE, PROCESSO, FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE, T_FINALE, DATA_CUT_OVER, MSISDN, ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN, MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME) VALUES ( rec.idRichiesta ,rec.tipoMessaggio ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.dataMessaggio ,rec.donorRete ,rec.recipientRete ,rec.terzaParte ,rec.processo ,flagCalcoloNumSim ,rec.nomeFile ,rec.tIniziale ,temp_data_fin ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,giorni_ritardo ,penale ,numero_sim ,proc_name ); EXCEPTION WHEN dup_val_on_index THEN begin DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA2_RECIPIENT - CHIAVE DUPLICATA PER LA RICHIESTA ' || rec.idRichiesta||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); end; end; END; END IF; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: 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 record_sla%ISOPEN then CLOSE record_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA2_RECIPIENT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLA2_RECIPIENT; procedure CARICAMENTO_SLA3_RECIPIENT(dataRif IN DATE,cod_errore OUT NUMBER) IS ackInizialeLetto VARCHAR2(27); flagCalcoloNumSim NUMBER(1):=0; temp_data_fin DATE; ora_fin_ftemp CHAR(2); min_fin_ftemp CHAR(2); sec_fin_ftemp CHAR(2); n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA3_RECIPIENT'; D_ini DATE; D_fine DATE; dataFinale DATE; penale NUMBER; giorni_ritardo NUMBER; numero_sim NUMBER; CURSOR record_sla is SELECT rich_out.ID_RICHIESTA AS idRichiesta ,'SLA3' as tipoMessaggio ,xml_in.MITTENTE AS donorEffettivo -- terza parte in donor EFFETTIVO x far funzionare dbcgo (al posto di rich_rec.CODICE_OPERATORE_DON_EFF) ,rich_rec.CODICE_OPERATORE_REC_EFF AS recipientEffettivo ,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio ,rich_rec.CODICE_OPERATORE_DONATING AS donorRete ,rich_rec.CODICE_OPERATORE_RECIPIENT AS recipientRete ,xml_in.MITTENTE as terzaParte ,xml_out.TIPO_PROCESSO AS processo ,rich_rec.RICHIESTAADHOCAOM AS richiestaAdHocAom ,rich_rec.codice_gruppo AS codiceGruppo ,ack_out.NOME_FILE as nomeFile ,to_date( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tIniziale ,to_date( SUBSTR(ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tFinale ,rich_rec.DATA_CUT_OVER_CALC AS dataCutOver ,rich_rec.MSISDN AS msIsdn ,ack_in.NOME_FILE AS ackIniziale ,ack_out.NOME_FILE AS ackFinale --,TO_DATE( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' )+2 AS dataAttesaEventoFin ,TO_CHAR ( TO_DATE( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') AS meseCompFinale ,xml_out.NOME_FILE AS nomeFileIniziale ,xml_in.NOME_FILE AS nomeFileFinale ,to_date( SUBSTR( rich_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataRicIn FROM mnp.MNP_XML_ACK_IN ack_in , mnp.MNP_XML_RICHIESTA_OUT rich_out, mnp.MNP_XML_OUT xml_out , mnp.MNP_XML_ACK_OUT ack_out , mnp.MNP_XML_RICHIESTA_IN rich_in , mnp.MNP_XML_IN xml_in , mnp.MNP_GESTIONE_RICHIESTA_REC rich_rec WHERE rich_out.NOME_FILE = xml_out.NOME_FILE AND ack_in.NOME_FILE_RIFERITO = rich_out.NOME_FILE AND xml_out.TIPO_FILE =3 ----porting AND xml_in.NOME_FILE = rich_in.NOME_FILE AND ack_out.NOME_FILE_RIFERITO = rich_in.NOME_FILE AND RICH_rec.ID_RICHIESTA = RICH_in.ID_RICHIESTA AND RICH_out.ID_RICHIESTA = RICH_in.ID_RICHIESTA AND xml_in.TIPO_FILE =6 AND xml_in.MITTENTE <>rich_rec.CODICE_OPERATORE_DONATING AND to_date( SUBSTR( ack_out.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)); BEGIN cod_errore := 0; ora_fin_ftemp := null; min_fin_ftemp := null; sec_fin_ftemp := null; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp,min_fin_ftemp,sec_fin_ftemp FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 6; FOR rec IN record_sla LOOP n_rec := n_rec +1; IF rec.tFinale > TO_DATE ((TO_CHAR (rec.dataRicIn, 'YYYYMMDD')||ora_fin_ftemp ||min_fin_ftemp||sec_fin_ftemp),'YYYYMMDDHH24MISS') THEN temp_data_fin := rec.dataRicIn; ELSE temp_data_fin := rec.tFinale; END IF; -- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO IF TRIM(rec.codiceGruppo) IS NOT NULL AND rec.richiestaAdHocAom > 0 THEN flagCalcoloNumSim:=1; ELSE flagCalcoloNumSim:=0; END IF; IF FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc(rec.tIniziale))-1>2 THEN BEGIN dataFinale:=fun_giorni_piu(rec.tIniziale,2); --giorni_ritardo := TRUNC(temp_data_fin- fun_giorni_piu(rec.tIniziale,2) ); giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); penale:= giorni_ritardo *10; if flagCalcoloNumSim = 1 THEN SELECT COUNT(*) INTO numero_sim FROM mnp.mnp_gestione_richiesta_rec c WHERE c.CODICE_GRUPPO=rec.codiceGruppo AND c.RICHIESTAADHOCAOM > 0; ELSE numero_sim := 0; END IF; INSERT INTO MNP_DW_SLA_3GG_OUT ( ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE, RECIPIENT_RETE, TERZA_PARTE, PROCESSO, FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE, T_FINALE, DATA_CUT_OVER, MSISDN, ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN, MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME) VALUES ( rec.idRichiesta ,rec.tipoMessaggio ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.dataMessaggio ,rec.donorRete ,rec.recipientRete ,rec.terzaParte ,rec.processo ,flagCalcoloNumSim ,rec.nomeFile ,rec.tIniziale ,temp_data_fin ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,giorni_ritardo ,penale ,numero_sim ,proc_name ); EXCEPTION WHEN dup_val_on_index THEN BEGIN -- lettura dati preesistenti SELECT ACK_INIZIALE INTO ackInizialeLetto FROM MNP_DW_SLA_3GG_OUT WHERE ID_RICHIESTA = rec.idRichiesta AND TIPO_MESSAGGIO = rec.tipoMessaggio AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo; -- se data dell'ack della nuova riga < data ack preesistente aggiorna i dati altrimenti scarta IF to_date( SUBSTR( rec.ackIniziale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(ackInizialeLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ) THEN UPDATE MNP_DW_SLA_3GG_OUT SET DATA_MESSAGGIO = rec.dataMessaggio ,DONOR_RETE = rec.donorRete ,RECIPIENT_RETE = rec.recipientRete ,TERZA_PARTE = rec.terzaParte ,PROCESSO = rec.processo ,FLAG_CALCOLO_NUMSIM = flagCalcoloNumSim ,NOME_FILE = rec.nomeFile ,T_INIZIALE=rec.tIniziale ,T_FINALE=temp_data_fin ,DATA_CUT_OVER=rec.dataCutOver ,MSISDN=rec.msIsdn ,ACK_INIZIALE=rec.ackIniziale ,ACK_FINALE=rec.ackFinale ,DATA_ATTESA_EVENTO_FIN=dataFinale ,MESE_COMP_FINALE=rec.meseCompFinale ,NOME_FILE_INIZIALE=rec.nomeFileIniziale ,NOME_FILE_FINALE=rec.nomeFileFinale ,NUMERO_GIORNI_RITARDO=giorni_ritardo ,PENALE=penale ,NUMERO_SIM=numero_sim ,PROC_NAME=proc_name WHERE ID_RICHIESTA = rec.idRichiesta AND TIPO_MESSAGGIO = rec.tipoMessaggio AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo; END IF; END; END; END IF; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: 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 record_sla%ISOPEN then CLOSE record_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA3_RECIPIENT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLA3_RECIPIENT; procedure CARICAMENTO_SLA0_DONOR(dataRif IN DATE,cod_errore OUT NUMBER) IS ackInizialeLetto VARCHAR2(27); flagCalcoloNumSim NUMBER(1):=0; temp_data_in DATE; temp_data_fin 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); n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA0_DONOR'; D_ini DATE; D_fine DATE; dataFinale DATE; penale NUMBER; giorni_ritardo NUMBER; numero_sim NUMBER; CURSOR record_sla is SELECT rich_in.ID_RICHIESTA AS idRichiesta ,'SLA0' AS tipoMessaggio ,g.CODICE_OPERATORE_DON_EFF AS donorEffettivo ,g.CODICE_OPERATORE_REC_EFF AS recipientEffettivo ,to_date( SUBSTR( rich_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio ,g.CODICE_OPERATORE_DONATING AS donorRete ,g.CODICE_OPERATORE_RECIPIENT AS recipientRete ,NULL as terzaParte ,xml_out.TIPO_PROCESSO as processo ,g.RICHIESTAADHOCAOM AS richiestaAdHocAom ,g.codice_gruppo AS codiceGruppo ,ack_out.NOME_FILE AS nomeFile ,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tIniziale ,to_date( SUBSTR( rich_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tFinale ,g.DATA_CUT_OVER AS dataCutOver ,g.MSISDN AS msIsdn ,ack_out.NOME_FILE AS ackIniziale ,ack_in.NOME_FILE AS ackFinale --,TO_DATE( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataAttesaEventoFin ,TO_CHAR ( TO_DATE( SUBSTR( rich_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') AS meseCompFinale ,xml_in.NOME_FILE AS nomeFileIniziale ,rich_out.NOME_FILE AS nomeFileFinale FROM mnp.MNP_XML_ACK_OUT ack_out , mnp.MNP_XML_RICHIESTA_IN rich_in , mnp.MNP_XML_IN xml_in , mnp.MNP_XML_RICHIESTA_OUT rich_out , mnp.MNP_XML_OUT xml_out , mnp.MNP_XML_ACK_IN ack_in , mnp.MNP_GESTIONE_RICHIESTA g WHERE ack_out.NOME_FILE_RIFERITO= rich_in.NOME_FILE AND xml_in.TIPO_FILE =1 --attivazione AND rich_in.NOME_FILE = xml_in.NOME_FILE AND ack_out.NOME_FILE_RIFERITO= xml_in.NOME_FILE AND xml_out.TIPO_FILE =5 ---pic AND xml_out.NOME_FILE =rich_out.NOME_FILE AND g.STATO =4 ---scartata AND g.ID_RICHIESTA = rich_out.ID_RICHIESTA AND rich_out.ID_RICHIESTA = rich_in.ID_RICHIESTA AND ack_in.NOME_FILE_RIFERITO = xml_out.NOME_FILE AND to_date( SUBSTR( rich_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)); 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_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); 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; 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; FOR rec IN record_sla LOOP n_rec := n_rec +1; IF rec.tIniziale > TO_DATE ((TO_CHAR (rec.tIniziale, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS') THEN temp_data_in := DWH.FUN_GIORNI_PIU (rec.tIniziale, 1); ELSE temp_data_in := rec.tIniziale; END IF; IF rec.tFinale > TO_DATE ((TO_CHAR (rec.tFinale, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS') THEN temp_data_fin := DWH.FUN_GIORNI_PIU (rec.tFinale, 1); ELSE temp_data_fin := rec.tFinale; END IF; -- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO IF TRIM(rec.codiceGruppo) IS NOT NULL AND rec.richiestaAdHocAom > 0 THEN flagCalcoloNumSim:=1; ELSE flagCalcoloNumSim:=0; END IF; if FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc(temp_data_in)) -1 > 0 THEN BEGIN dataFinale:=fun_giorni_piu(temp_data_in,0); --giorni_ritardo := TRUNC(temp_data_fin- fun_giorni_piu(temp_data_in,0) ); giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); penale:= giorni_ritardo *50; if flagCalcoloNumSim = 1 THEN SELECT COUNT(*) INTO numero_sim FROM mnp.mnp_gestione_richiesta c WHERE c.CODICE_GRUPPO=rec.codiceGruppo AND c.RICHIESTAADHOCAOM > 0; ELSE numero_sim := 0; END IF; INSERT INTO MNP_DW_SLA_3GG_OUT ( ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE, RECIPIENT_RETE, TERZA_PARTE, PROCESSO, FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE, T_FINALE, DATA_CUT_OVER, MSISDN, ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN, MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME) VALUES ( rec.idRichiesta ,rec.tipoMessaggio ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.dataMessaggio ,rec.donorRete ,rec.recipientRete ,rec.terzaParte ,rec.processo ,flagCalcoloNumSim ,rec.nomeFile ,temp_data_in ,temp_data_fin ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,giorni_ritardo ,penale ,numero_sim ,proc_name ); END; END IF; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: 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 record_sla%ISOPEN then CLOSE record_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA0_DONOR ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLA0_DONOR; procedure CARICAMENTO_SLA1_DONOR(dataRif IN DATE,cod_errore OUT NUMBER) IS ackInizialeLetto VARCHAR2(27); flagCalcoloNumSim NUMBER(1):=0; temp_data_in DATE; temp_data_fin 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); n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA1_DONOR'; D_ini DATE; D_fine DATE; dataFinale DATE; penale NUMBER; giorni_ritardo NUMBER; numero_sim NUMBER; CURSOR record_sla is SELECT rich_in.ID_RICHIESTA AS idRichiesta ,'SLA1' as tipoMessaggio ,g.CODICE_OPERATORE_DON_EFF AS donorEffettivo ,g.CODICE_OPERATORE_REC_EFF AS recipientEffettivo ,to_date( SUBSTR( rich_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio ,g.CODICE_OPERATORE_DONATING AS donorRete ,g.CODICE_OPERATORE_RECIPIENT AS recipientRete ,NULL as terzaParte ,xml_out.TIPO_PROCESSO AS processo ,g.RICHIESTAADHOCAOM AS richiestaAdHocAom ,g.codice_gruppo AS codiceGruppo ,xml_out.NOME_FILE as nomeFile ,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tIniziale ,to_date( SUBSTR( rich_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tFinale ,g.DATA_CUT_OVER_CALC AS dataCutOver ,g.MSISDN AS msIsdn ,ack_out.NOME_FILE AS ackIniziale ,ack_in.NOME_FILE AS ackFinale --,TO_DATE( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' )+1 AS dataAttesaEventoFin ,TO_CHAR ( TO_DATE( SUBSTR( rich_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') AS meseCompFinale ,xml_in.NOME_FILE AS nomeFileIniziale ,rich_out.NOME_FILE AS nomeFileFinale FROM mnp.MNP_XML_ACK_OUT ack_out , mnp.MNP_XML_RICHIESTA_IN rich_in , mnp.MNP_XML_IN xml_in , mnp.MNP_XML_RICHIESTA_OUT rich_out , mnp.MNP_XML_OUT xml_out , mnp.MNP_XML_ACK_IN ack_in , mnp.MNP_GESTIONE_RICHIESTA g WHERE ack_out.NOME_FILE_RIFERITO = rich_in.NOME_FILE AND xml_in.TIPO_FILE =1 --attivazione AND rich_in.NOME_FILE = xml_in.NOME_FILE AND ack_out.NOME_FILE_RIFERITO = xml_in.NOME_FILE AND xml_out.TIPO_FILE =2 ---VALIDAZIONE AND xml_out.NOME_FILE =rich_out.NOME_FILE AND rich_out.ID_RICHIESTA = rich_in.ID_RICHIESTA AND ack_in.NOME_FILE_RIFERITO = xml_out.NOME_FILE AND g.ID_RICHIESTA = rich_out.ID_RICHIESTA AND to_date( SUBSTR( rich_out.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) ---PRENDO TUTTI GLI ACK A PARTIRE DAL 1-30 DEL MESE PRECEDENTE BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)); 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_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); 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; 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; FOR rec IN record_sla LOOP n_rec := n_rec +1; IF rec.tIniziale > TO_DATE ((TO_CHAR (rec.tIniziale, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS') THEN temp_data_in := DWH.FUN_GIORNI_PIU (rec.tIniziale, 1); ELSE temp_data_in := rec.tIniziale; END IF; IF rec.tFinale > TO_DATE ((TO_CHAR (rec.tFinale, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS') THEN temp_data_fin := DWH.FUN_GIORNI_PIU (rec.tFinale, 1); ELSE temp_data_fin := rec.tFinale; END IF; -- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO IF TRIM(rec.codiceGruppo) IS NOT NULL AND rec.richiestaAdHocAom > 0 THEN flagCalcoloNumSim:=1; ELSE flagCalcoloNumSim:=0; END IF; IF FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc( temp_data_in)) -1 >1 THEN BEGIN dataFinale:=fun_giorni_piu( temp_data_in,1); -- giorni_ritardo := TRUNC(temp_data_fin- fun_giorni_piu( temp_data_in,1) ); giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); penale:= giorni_ritardo *50; if flagCalcoloNumSim = 1 THEN SELECT COUNT(*) INTO numero_sim FROM mnp.mnp_gestione_richiesta c WHERE c.CODICE_GRUPPO=rec.codiceGruppo AND c.RICHIESTAADHOCAOM > 0; ELSE numero_sim := 0; END IF; INSERT INTO MNP_DW_SLA_3GG_OUT ( ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE, RECIPIENT_RETE, TERZA_PARTE, PROCESSO, FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE, T_FINALE, DATA_CUT_OVER, MSISDN, ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN, MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME) VALUES ( rec.idRichiesta ,rec.tipoMessaggio ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.dataMessaggio ,rec.donorRete ,rec.recipientRete ,rec.terzaParte ,rec.processo ,flagCalcoloNumSim ,rec.nomeFile ,temp_data_in ,temp_data_fin ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,giorni_ritardo ,penale ,numero_sim ,proc_name ); EXCEPTION WHEN dup_val_on_index THEN BEGIN -- lettura dati preesistenti SELECT NOME_FILE_FINALE INTO ackInizialeLetto FROM MNP_DW_SLA_3GG_OUT WHERE ID_RICHIESTA = rec.idRichiesta AND TIPO_MESSAGGIO = rec.tipoMessaggio AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo; -- se data dell'ack della nuova riga < data ack preesistente aggiorna i dati altrimenti scarta IF to_date( SUBSTR( rec.nomeFileFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(ackInizialeLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ) THEN UPDATE MNP_DW_SLA_3GG_OUT SET DATA_MESSAGGIO = rec.dataMessaggio ,DONOR_RETE = rec.donorRete ,RECIPIENT_RETE = rec.recipientRete ,TERZA_PARTE = rec.terzaParte ,PROCESSO = rec.processo ,FLAG_CALCOLO_NUMSIM = flagCalcoloNumSim ,NOME_FILE = rec.nomeFile ,T_INIZIALE=temp_data_in ,T_FINALE=temp_data_fin ,DATA_CUT_OVER=rec.dataCutOver ,MSISDN=rec.msIsdn ,ACK_INIZIALE=rec.ackIniziale ,ACK_FINALE=rec.ackFinale ,DATA_ATTESA_EVENTO_FIN=dataFinale ,MESE_COMP_FINALE=rec.meseCompFinale ,NOME_FILE_INIZIALE=rec.nomeFileIniziale ,NOME_FILE_FINALE=rec.nomeFileFinale ,NUMERO_GIORNI_RITARDO=giorni_ritardo ,PENALE=penale ,NUMERO_SIM=numero_sim ,PROC_NAME=proc_name WHERE ID_RICHIESTA = rec.idRichiesta AND TIPO_MESSAGGIO = rec.tipoMessaggio AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo; END IF; END; END; END IF; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: 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 record_sla%ISOPEN then CLOSE record_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in CARICAMENTO_SLA1_DONOR ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLA1_DONOR; procedure CARICAMENTO_SLA2_DONOR(dataRif IN DATE,cod_errore OUT NUMBER) IS ackInizialeLetto VARCHAR2(27); flagCalcoloNumSim NUMBER(1):=0; temp_data_in DATE; temp_data_fin 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); n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA2_DONOR'; D_ini DATE; D_fine DATE; dataFinale DATE; penale NUMBER; giorni_ritardo NUMBER; numero_sim NUMBER; CURSOR record_sla is SELECT rich_out.ID_RICHIESTA AS idRichiesta ,'SLA2' AS tipoMessaggio ,g.CODICE_OPERATORE_DON_EFF AS donorEffettivo ,g.CODICE_OPERATORE_REC_EFF AS recipientEffettivo ,to_date( SUBSTR( rich_out_fin.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio ,g.CODICE_OPERATORE_DONATING AS donorRete ,g.CODICE_OPERATORE_RECIPIENT AS recipientRete ,NULL as terzaParte ,xml_out.tipo_processo AS processo ,g.RICHIESTAADHOCAOM AS richiestaAdHocAom ,g.codice_gruppo AS codiceGruppo ,xml_out_fin.NOME_FILE as nomeFile ,to_date( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tIniziale ,to_date( SUBSTR(xml_out_fin.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tFinale ,g.DATA_CUT_OVER_CALC AS dataCutOver ,g.MSISDN AS msIsdn ,ack_in.NOME_FILE AS ackIniziale ,NULL AS ackFinale --,TO_DATE( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' )+2 AS dataAttesaEventoFin ,TO_CHAR ( TO_DATE( SUBSTR( xml_out_fin.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') AS meseCompFinale ,ack_in.NOME_FILE AS nomeFileIniziale ,xml_out_fin.NOME_FILE AS nomeFileFinale FROM mnp.MNP_XML_ACK_IN ack_in_fin , mnp.MNP_XML_RICHIESTA_OUT rich_out , mnp.MNP_XML_OUT xml_out , mnp.MNP_XML_RICHIESTA_OUT rich_out_fin, mnp.MNP_XML_OUT xml_out_fin , mnp.MNP_XML_ACK_IN ack_in , mnp.MNP_GESTIONE_RICHIESTA g WHERE rich_out.NOME_FILE = xml_out.NOME_FILE AND rich_out.NOME_FILE = ack_in.NOME_FILE_RIFERITO AND xml_out.TIPO_FILE = 2 ----VALIDAZIONE AND rich_out_fin.NOME_FILE = xml_out_fin.NOME_FILE AND xml_out_fin.TIPO_FILE =6 ---ESPLETAMENTO AND xml_out_fin.DESTINATARIO <> 'NPTS' AND rich_out_fin.ID_RICHIESTA =rich_out.ID_RICHIESTA AND g.ID_RICHIESTA = rich_out_fin.ID_RICHIESTA AND ack_in_fin.NOME_FILE_RIFERITO = xml_out_fin.NOME_FILE AND to_date( SUBSTR( rich_out_fin.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) ---PRENDO TUTTI GLI ACK A PARTIRE DAL 1-30 DEL MESE PRECEDENTE BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)); BEGIN cod_errore := 0; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); ora_fin_ftemp1 := null; min_fin_ftemp1 := null; sec_fin_ftemp1 := null; ora_fin_ftemp2 := null; min_fin_ftemp2 := null; sec_fin_ftemp2 := null; 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; 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; FOR rec IN record_sla LOOP n_rec := n_rec +1; IF rec.tIniziale > TO_DATE ((TO_CHAR (rec.tIniziale , 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS') THEN temp_data_in := DWH.FUN_GIORNI_PIU (rec.tIniziale , 1); ELSE temp_data_in := rec.tIniziale ; END IF; IF rec.tFinale > TO_DATE ((TO_CHAR (rec.tFinale, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS') THEN temp_data_fin := DWH.FUN_GIORNI_PIU (rec.tFinale, 1); ELSE temp_data_fin := rec.tFinale; END IF; -- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO IF TRIM(rec.codiceGruppo) IS NOT NULL AND rec.richiestaAdHocAom > 0 THEN flagCalcoloNumSim:=1; ELSE flagCalcoloNumSim:=0; END IF; IF FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc(temp_data_in)) -1 >2 THEN BEGIN dataFinale:=fun_giorni_piu(temp_data_in,2); -- giorni_ritardo := TRUNC(temp_data_fin- fun_giorni_piu(temp_data_in,2) ); giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); penale:=giorni_ritardo*50; if flagCalcoloNumSim = 1 THEN SELECT COUNT(*) INTO numero_sim FROM mnp.mnp_gestione_richiesta c WHERE c.CODICE_GRUPPO=rec.codiceGruppo AND c.RICHIESTAADHOCAOM > 0; ELSE numero_sim := 0; END IF; INSERT INTO MNP_DW_SLA_3GG_OUT ( ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE, RECIPIENT_RETE, TERZA_PARTE, PROCESSO, FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE, T_FINALE, DATA_CUT_OVER, MSISDN, ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN, MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME) VALUES ( rec.idRichiesta ,rec.tipoMessaggio ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.dataMessaggio ,rec.donorRete ,rec.recipientRete ,rec.terzaParte ,rec.processo ,flagCalcoloNumSim ,rec.nomeFile ,temp_data_in ,temp_data_fin ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,giorni_ritardo ,penale ,numero_sim ,proc_name ); EXCEPTION /*@@@ con la max non funziona perchè restringe l'intervallo**/ WHEN dup_val_on_index THEN BEGIN -- lettura dati preesistenti SELECT ACK_INIZIALE INTO ackInizialeLetto FROM MNP_DW_SLA_3GG_OUT WHERE ID_RICHIESTA = rec.idRichiesta AND TIPO_MESSAGGIO = rec.tipoMessaggio AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo; -- se data dell'ack della nuova riga > data ack preesistente aggiorna i dati altrimenti scarta IF to_date( SUBSTR( rec.ackIniziale, 5 , 14) ,'YYYYMMDDHH24MISS' ) > to_date( SUBSTR(ackInizialeLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ) --qua prende la massima?? THEN UPDATE MNP_DW_SLA_3GG_OUT SET DATA_MESSAGGIO = rec.dataMessaggio ,DONOR_RETE = rec.donorRete ,RECIPIENT_RETE = rec.recipientRete ,TERZA_PARTE = rec.terzaParte ,PROCESSO = rec.processo ,FLAG_CALCOLO_NUMSIM = flagCalcoloNumSim ,NOME_FILE = rec.nomeFile ,T_INIZIALE=temp_data_in ,T_FINALE=temp_data_fin ,DATA_CUT_OVER=rec.dataCutOver ,MSISDN=rec.msIsdn ,ACK_INIZIALE=rec.ackIniziale ,ACK_FINALE=rec.ackFinale ,DATA_ATTESA_EVENTO_FIN=dataFinale ,MESE_COMP_FINALE=rec.meseCompFinale ,NOME_FILE_INIZIALE=rec.nomeFileIniziale ,NOME_FILE_FINALE=rec.nomeFileFinale ,NUMERO_GIORNI_RITARDO=giorni_ritardo ,PENALE=penale ,NUMERO_SIM=numero_sim ,PROC_NAME=proc_name WHERE ID_RICHIESTA = rec.idRichiesta AND TIPO_MESSAGGIO = rec.tipoMessaggio AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo; END IF; END; END; ELSE -- non e' fuori SLA pero' potrebbe esistere una riga relativa ad un precedente ACK, calcolata fuori SLA, da cancellare... BEGIN DELETE FROM MNP_DW_SLA_3GG_OUT WHERE ID_RICHIESTA = rec.idRichiesta AND TIPO_MESSAGGIO = rec.tipoMessaggio AND DONOR_EFFETTIVO = rec.donorEffettivo AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo; EXCEPTION when no_data_found then NULL; END; end if; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: 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 record_sla%ISOPEN then CLOSE record_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA2_DONOR ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLA2_DONOR; procedure CARICAMENTO_SLA3_DONOR(dataRif IN DATE,cod_errore OUT NUMBER) IS flagCalcoloNumSim NUMBER(1):=0; temp_data_in DATE; temp_data_fin 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); n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA3_DONOR'; D_ini DATE; D_fine DATE; dataFinale DATE; penale NUMBER; giorni_ritardo NUMBER; numero_sim NUMBER; CURSOR record_sla is SELECT rich_in.ID_RICHIESTA AS idRichiesta ,'SLA3' as tipoMessaggio ,porting.CODICE_OPERATORE_DON_EFF AS donorEffettivo ,porting.CODICE_OPERATORE_REC_EFF AS recipientEffettivo ,to_date( SUBSTR( rich_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio ,porting.CODICE_OPERATORE_DONATING AS donorRete ,porting.CODICE_OPERATORE_RECIPIENT AS recipientRete ,NULL AS terzaParte ,'D' as processo --,xml_out.TIPO_PROCESSO AS processo ,0 AS richiestaAdHocAom ,NULL AS codiceGruppo ,xml_out.NOME_FILE as nomeFile ,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tIniziale ,to_date( SUBSTR( rich_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tFinale ,porting.DATA_CUT_OVER AS dataCutOver ,porting.MSISDN AS msIsdn ,ack_out.NOME_FILE AS ackIniziale ,ack_in.NOME_FILE AS ackFinale --,TO_DATE( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' )+2 AS dataAttesaEventoFin ,TO_CHAR ( TO_DATE( SUBSTR( rich_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') AS meseCompFinale ,xml_in.NOME_FILE AS nomeFileIniziale ,rich_out.NOME_FILE AS nomeFileFinale FROM mnp.MNP_XML_ACK_OUT ack_out , mnp.MNP_XML_RICHIESTA_IN rich_in , mnp.MNP_XML_IN xml_in , mnp.MNP_XML_RICHIESTA_OUT rich_out , mnp.MNP_GESTIONE_RICHIESTA_PORTING porting, mnp.MNP_XML_ACK_IN ack_in , mnp.MNP_XML_OUT xml_out WHERE ack_out.NOME_FILE_RIFERITO= rich_in.NOME_FILE AND xml_in.TIPO_FILE =3 --porting AND rich_in.NOME_FILE = xml_in.NOME_FILE AND ack_out.NOME_FILE_RIFERITO= xml_in.NOME_FILE AND xml_out.TIPO_FILE =6 ---espletamento AND rich_out.NOME_FILE = xml_out.NOME_FILE AND porting.ID_RICHIESTA =rich_out.ID_RICHIESTA AND rich_in.ID_RICHIESTA =rich_out.ID_RICHIESTA AND ack_in.NOME_FILE_RIFERITO =xml_out.NOME_FILE AND to_date( SUBSTR( rich_out.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)); 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_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); 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; 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; FOR rec IN record_sla LOOP n_rec := n_rec +1; IF rec.tIniziale > TO_DATE ((TO_CHAR (rec.tIniziale, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS') THEN temp_data_in := DWH.FUN_GIORNI_PIU (rec.tIniziale, 1); ELSE temp_data_in := rec.tIniziale; END IF; IF rec.tFinale > TO_DATE ((TO_CHAR (rec.tFinale, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS') THEN temp_data_fin := DWH.FUN_GIORNI_PIU (rec.tFinale, 1); ELSE temp_data_fin := rec.tFinale; END IF; IF FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc(temp_data_in)) -1 >2 THEN BEGIN dataFinale:=fun_giorni_piu(temp_data_in,2); -- giorni_ritardo := TRUNC(temp_data_fin- fun_giorni_piu(temp_data_in,2) ); giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); penale:= giorni_ritardo *10; numero_sim:=0; INSERT INTO MNP_DW_SLA_3GG_OUT ( ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE, RECIPIENT_RETE, TERZA_PARTE, PROCESSO, FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE, T_FINALE, DATA_CUT_OVER, MSISDN, ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN, MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME) VALUES ( rec.idRichiesta ,rec.tipoMessaggio ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.dataMessaggio ,rec.donorRete ,rec.recipientRete ,rec.terzaParte ,rec.processo ,flagCalcoloNumSim ,rec.nomeFile ,temp_data_in ,temp_data_fin ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,giorni_ritardo ,penale ,numero_sim ,proc_name ); end; end if; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: 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 record_sla%ISOPEN then CLOSE record_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA3_DONOR ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLA3_DONOR; procedure CARICAMENTO_SLA1_DONOR_VIRT(dataRif IN DATE,cod_errore OUT NUMBER) IS n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA1_DONOR_VIRT'; D_ini DATE; D_fine DATE; dataFinale DATE; penale NUMBER; giorni_ritardo NUMBER; numero_sim NUMBER; CURSOR record_sla is SELECT rich_don_virt.ID_RICHIESTA AS idRichiesta ,'SLA1' as tipoMessaggio ,rich_don_virt.CODICE_OPERATORE_DONATING AS donorEffettivo ,rich_don_virt.CODICE_OPERATORE_RECIPIENT AS recipientEffettivo ,stor_don_virt_fin.DATA_I_O as dataMessaggio ,'TIMG' AS donorRete ,'TIMG' AS recipientRete ,NULL as terzaParte ,'R' as processo , 0 as richiestaAdHocAom , NULL as codiceGruppo , NULL as nomeFile ,stor_don_virt_ini.DATA_I_O AS tIniziale ,stor_don_virt_fin.DATA_I_O AS tFinale ,rich_don_virt.DATA_CUT_OVER_CALC as dataCutOver ,rich_don_virt.MSISDN AS msIsdn ,NULL as ackIniziale ,NULL as ackFinale --,stor_don_virt_ini.DATA_I_O + 1 AS dataAttesaEventoFin ,TO_CHAR( stor_don_virt_fin.DATA_I_O ,'MM/YYYY' ) AS meseCompFinale ,NULL AS nomeFileIniziale ,NULL AS nomeFileFinale FROM mnp.MNP_GEST_RICH_DONOR_VIRT rich_don_virt , mnp.MNP_STORICO_RICH_DON_VIRT stor_don_virt_ini, mnp.MNP_STORICO_RICH_DON_VIRT stor_don_virt_fin WHERE rich_don_virt.ID_RICHIESTA = stor_don_virt_ini.ID_RICHIESTA AND rich_don_virt.ID_RICHIESTA = stor_don_virt_fin.ID_RICHIESTA AND stor_don_virt_ini.STATO_A = 2 ----LAVORABILE AND stor_don_virt_fin.STATO_A IN (6,7) ----VALIDAZIONE OK/KO AND stor_don_virt_fin.DATA_I_O ---PRENDO TUTTE LE TRANSIZIONI DEL 1-30 DEL MESE PRECEDENTE BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)); BEGIN cod_errore := 0; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); FOR rec IN record_sla LOOP n_rec := n_rec +1; IF FUN_GIORNI_LAVORATIVI (trunc(rec.tFinale) , trunc( rec.tIniziale)) -1 >1 then begin dataFinale:=fun_giorni_piu(rec.tIniziale,1); -- giorni_ritardo := TRUNC(rec.tFinale- fun_giorni_piu(rec.tIniziale,1) ); giorni_ritardo := TRUNC( trunc(rec.tFinale) - trunc(dataFinale) ); penale:= giorni_ritardo *50; numero_sim:=0; INSERT INTO MNP_DW_SLA_3GG_OUT ( ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE, RECIPIENT_RETE, TERZA_PARTE, PROCESSO, FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE, T_FINALE, DATA_CUT_OVER, MSISDN, ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN, MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME) VALUES ( rec.idRichiesta ,rec.tipoMessaggio ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.dataMessaggio ,rec.donorRete ,rec.recipientRete ,rec.terzaParte ,rec.processo ,0 --flagcalcolonumsim ,rec.nomeFile ,rec.tIniziale ,rec.tFinale ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,giorni_ritardo ,penale ,numero_sim ,proc_name ); END; END IF; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: 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 record_sla%ISOPEN then CLOSE record_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA1_DONOR_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLA1_DONOR_VIRT; procedure CARICAMENTO_SLA2_DONOR_VIRT(dataRif IN DATE,cod_errore OUT NUMBER) IS n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA2_DONOR_VIRT'; D_ini DATE; D_fine DATE; penale NUMBER; giorni_ritardo NUMBER; numero_sim NUMBER; dataFinale DATE; CURSOR record_sla is SELECT rich_don_virt.ID_RICHIESTA AS idRichiesta ,'SLA2' as tipoMessaggio ,rich_don_virt.CODICE_OPERATORE_DONATING AS donorEffettivo ,rich_don_virt.CODICE_OPERATORE_RECIPIENT AS recipientEffettivo ,stor_don_virt_fin.DATA_I_O AS dataMessaggio ,'TIMG' AS donorRete ,'TIMG' AS recipientRete ,NULL as terzaParte ,'R' as processo ,0 as richiestaAdHocAom ,NULL as codiceGruppo ,NULL as nomeFile ,stor_don_virt_ini.DATA_I_O AS tIniziale ,stor_don_virt_fin.DATA_I_O AS tFinale ,rich_don_virt.DATA_CUT_OVER_CALC AS dataCutOver ,rich_don_virt.MSISDN AS msIsdn ,NULL as ackIniziale ,NULL as ackFinale --,stor_don_virt_ini.DATA_I_O+2 AS dataAttesaEventoFin ,TO_CHAR( stor_don_virt_fin.DATA_I_O ,'MM/YYYY' ) AS meseCompFinale ,NULL AS nomeFileIniziale ,NULL AS nomeFileFinale FROM mnp.MNP_GEST_RICH_DONOR_VIRT rich_don_virt , mnp.MNP_STORICO_RICH_DON_VIRT stor_don_virt_ini, mnp.MNP_STORICO_RICH_DON_VIRT stor_don_virt_fin WHERE rich_don_virt.ID_RICHIESTA = stor_don_virt_ini.ID_RICHIESTA AND rich_don_virt.ID_RICHIESTA = stor_don_virt_fin.ID_RICHIESTA AND stor_don_virt_ini.STATO_A = 6 ----VALIDAZIONE OK AND stor_don_virt_fin.STATO_A =10 ----CESSATA AND stor_don_virt_fin.DATA_I_O ---PRENDO TUTTE LE TRANSIZIONI DEL 1-30 DEL MESE PRECEDENTE BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)); BEGIN cod_errore := 0; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); FOR rec IN record_sla LOOP n_rec := n_rec +1; IF FUN_GIORNI_LAVORATIVI (trunc(rec.tFinale) , trunc(rec.tIniziale)) -1 > 2 then begin dataFinale:=fun_giorni_piu(rec.tIniziale,2); --giorni_ritardo := TRUNC(rec.tFinale- fun_giorni_piu(rec.tIniziale,2) ); giorni_ritardo := TRUNC( trunc(rec.tFinale) - trunc(dataFinale) ); penale:= giorni_ritardo *50; numero_sim:=0; INSERT INTO MNP_DW_SLA_3GG_OUT ( ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE, RECIPIENT_RETE, TERZA_PARTE, PROCESSO, FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE, T_FINALE, DATA_CUT_OVER, MSISDN, ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN, MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME) VALUES ( rec.idRichiesta ,rec.tipoMessaggio ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.dataMessaggio ,rec.donorRete ,rec.recipientRete ,rec.terzaParte ,rec.processo ,0 --flagcalolonumsim ,rec.nomeFile ,rec.tIniziale ,rec.tFinale ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,giorni_ritardo ,penale ,numero_sim ,proc_name ); END; END IF; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: 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 record_sla%ISOPEN then CLOSE record_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA2_DONOR_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLA2_DONOR_VIRT; procedure CARICAMENTO_SLA3_DONOR_VIRT(dataRif IN DATE,cod_errore OUT NUMBER) IS n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA3_DONOR_VIRT'; D_ini DATE; D_fine DATE; temp_data_fin DATE; ora_fin_ftemp1 CHAR(2); min_fin_ftemp1 CHAR(2); sec_fin_ftemp1 CHAR(2); penale NUMBER; giorni_ritardo NUMBER; numero_sim NUMBER; dataFinale DATE; CURSOR record_sla is SELECT rich_don_virt.ID_RICHIESTA AS idRichiesta ,'SLA3' as tipoMessaggio ,xml_in.MITTENTE AS donorEffettivo --forzatura terza parte in donor EFFETTIVO (al posto di rich_don_virt.CODICE_OPERATORE_DONATING ) per dbcgo ,rich_don_virt.CODICE_OPERATORE_RECIPIENT as recipientEffettivo ,to_date( SUBSTR( rich_in.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio ,'TIMG' AS donorRete ,'TIMG' AS recipientRete ,xml_in.MITTENTE AS terzaParte ,'R' as processo ,0 as richiestaAdHocAom ,NULL as codiceGruppo ,ack_out.NOME_FILE AS nomeFile ,stor_don_virt.DATA_I_O AS tIniziale ,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tFinale ,rich_don_virt.DATA_CUT_OVER_CALC as dataCutOver ,rich_don_virt.MSISDN AS msIsdn ,NULL as ackIniziale ,NULL as ackFinale --,stor_don_virt.DATA_I_O+2 AS dataAttesaEventoFin ,TO_CHAR( to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) ,'MM/YYYY' ) as meseCompFinale ,NULL AS nomeFileIniziale ,NULL AS nomeFileFinale FROM mnp.MNP_GEST_RICH_DONOR_VIRT rich_don_virt , mnp.MNP_STORICO_RICH_DON_VIRT stor_don_virt, mnp.MNP_XML_ACK_OUT ack_out , mnp.MNP_XML_IN xml_in , mnp.MNP_XML_RICHIESTA_IN rich_in WHERE rich_don_virt.ID_RICHIESTA = stor_don_virt.ID_RICHIESTA AND stor_don_virt.STATO_A = 13 ----ACCETTATA AND xml_in.TIPO_FILE = 6 -- ESPLETAMENTO AND ack_out.NOME_FILE_RIFERITO = rich_in.NOME_FILE AND xml_in.NOME_FILE = rich_in.NOME_FILE AND rich_in.ID_RICHIESTA = rich_don_virt.ID_RICHIESTA AND to_date( SUBSTR( ack_out.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)); BEGIN cod_errore := 0; ora_fin_ftemp1 := null; min_fin_ftemp1 := null; sec_fin_ftemp1 := null; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); 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 = 6; FOR rec IN record_sla LOOP n_rec := n_rec +1; IF rec.tFinale > TO_DATE ((TO_CHAR (rec.tFinale, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS') THEN temp_data_fin := rec.dataMessaggio; ELSE temp_data_fin := rec.tFinale; END IF; IF FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc(rec.tIniziale)) -1 > 2 THEN BEGIN dataFinale:=fun_giorni_piu(rec.tIniziale,2); --giorni_ritardo := TRUNC(temp_data_fin- fun_giorni_piu(rec.tIniziale,2) ); giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); penale:= giorni_ritardo *10; numero_sim:=0; INSERT INTO MNP_DW_SLA_3GG_OUT ( ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE, RECIPIENT_RETE, TERZA_PARTE, PROCESSO, FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE, T_FINALE, DATA_CUT_OVER, MSISDN, ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN, MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME) VALUES ( rec.idRichiesta ,rec.tipoMessaggio ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.dataMessaggio ,rec.donorRete ,rec.recipientRete ,rec.terzaParte ,rec.processo ,0 --flagcalcolonumsim ,rec.nomeFile ,rec.tIniziale ,temp_data_fin ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,giorni_ritardo ,penale ,numero_sim ,proc_name ); END; END IF; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: 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 record_sla%ISOPEN then CLOSE record_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA2_DONOR_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLA3_DONOR_VIRT; procedure CARICAMENTO_SLA1_REC_VIRT(dataRif IN DATE,cod_errore OUT NUMBER) IS n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA1_REC_VIRT'; D_ini DATE; D_fine DATE; dataFinale DATE; penale NUMBER; giorni_ritardo NUMBER; numero_sim NUMBER; CURSOR record_sla is SELECT rich_rec_virt.ID_RICHIESTA AS idRichiesta ,'SLA1' as tipoMessaggio ,rich_rec_virt.CODICE_OPERATORE_DONATING as donorEffettivo ,rich_rec_virt.CODICE_OPERATORE_RECIPIENT as recipientEffettivo ,stor_rec_virt_fin.DATA_I_O AS dataMessaggio ,'TIMG' AS donorRete ,'TIMG' AS recipientRete ,NULL as terzaParte ,'D' as processo ,0 as richiestaAdHocAom ,NULL as codiceGruppo ,NULL as nomeFile ,stor_rec_virt_ini.DATA_I_O as tIniziale ,stor_rec_virt_fin.DATA_I_O as tFinale ,rich_rec_virt.DATA_CUT_OVER_CALC as dataCutOver ,rich_rec_virt.MSISDN AS msIsdn ,NULL as ackIniziale ,NULL as ackFinale --,stor_rec_virt_ini.DATA_I_O+1 AS dataAttesaEventoFin ,TO_CHAR( stor_rec_virt_fin.DATA_I_O ,'MM/YYYY' ) as meseCompFinale ,NULL AS nomeFileIniziale ,NULL AS nomeFileFinale FROM mnp.MNP_GEST_RICH_REC_VIRT rich_rec_virt , mnp.MNP_STORICO_RICH_REC_VIRT stor_rec_virt_ini, mnp.MNP_STORICO_RICH_REC_VIRT stor_rec_virt_fin WHERE rich_rec_virt.ID_RICHIESTA = stor_rec_virt_ini.ID_RICHIESTA AND rich_rec_virt.ID_RICHIESTA = stor_rec_virt_fin.ID_RICHIESTA AND stor_rec_virt_ini.STATO_A = 2 ----LAVORABILE AND stor_rec_virt_fin.STATO_A IN (6,7) ----VALIDAZIONE OK/KO AND rich_rec_virt.CODICE_OPERATORE_DONATING = 'TIMG' AND stor_rec_virt_fin.DATA_I_O ---PRENDO TUTTE LE TRANSIZIONI DEL 1-30 DEL MESE PRECEDENTE BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)); BEGIN cod_errore := 0; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); FOR rec IN record_sla LOOP n_rec := n_rec +1; IF FUN_GIORNI_LAVORATIVI (trunc(rec.tFinale) , trunc( rec.tIniziale)) -1 >1 then begin dataFinale:=fun_giorni_piu(rec.tIniziale,1); --giorni_ritardo := TRUNC(rec.tFinale- fun_giorni_piu(rec.tIniziale,1) ); giorni_ritardo := TRUNC( trunc(rec.tFinale) - trunc(dataFinale) ); penale:= giorni_ritardo *50; numero_sim:=0; INSERT INTO MNP_DW_SLA_3GG_OUT ( ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE, RECIPIENT_RETE, TERZA_PARTE, PROCESSO, FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE, T_FINALE, DATA_CUT_OVER, MSISDN, ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN, MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME) VALUES ( rec.idRichiesta ,rec.tipoMessaggio ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.dataMessaggio ,rec.donorRete ,rec.recipientRete ,rec.terzaParte ,rec.processo ,0 --flagCalcoloNumSim ,rec.nomeFile ,rec.tIniziale ,rec.tFinale ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,giorni_ritardo ,penale ,numero_sim ,proc_name ); END; END IF; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: 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 record_sla%ISOPEN then CLOSE record_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA1_REC_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLA1_REC_VIRT; procedure CARICAMENTO_SLA2_REC_VIRT(dataRif IN DATE,cod_errore OUT NUMBER) IS n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA2_REC_VIRT'; D_ini DATE; D_fine DATE; dataFinale DATE; penale NUMBER; giorni_ritardo NUMBER; numero_sim NUMBER; CURSOR record_sla is SELECT rich_rec_virt.ID_RICHIESTA AS idRichiesta ,'SLA2' as tipoMessaggio ,rich_rec_virt.CODICE_OPERATORE_DONATING as donorEffettivo ,rich_rec_virt.CODICE_OPERATORE_RECIPIENT as recipientEffettivo ,stor_rec_virt_fin.DATA_I_O as dataMessaggio ,'TIMG' AS donorRete ,'TIMG' AS recipientRete ,NULL as terzaParte ,'D' as processo , 0 as richiestaAdHocAom ,NULL as codiceGruppo ,NULL as nomeFile ,stor_rec_virt_ini.DATA_I_O as tIniziale ,stor_rec_virt_fin.DATA_I_O as tFinale ,rich_rec_virt.DATA_CUT_OVER_CALC as dataCutOver ,rich_rec_virt.MSISDN as msIsdn ,NULL as ackIniziale ,NULL as ackFinale --,stor_rec_virt_ini.DATA_I_O+2 AS dataAttesaEventoFin ,TO_CHAR( stor_rec_virt_fin.DATA_I_O ,'MM/YYYY' ) as meseCompFinale ,NULL AS nomeFileIniziale ,NULL AS nomeFileFinale FROM mnp.MNP_GEST_RICH_REC_VIRT rich_rec_virt , mnp.MNP_STORICO_RICH_REC_VIRT stor_rec_virt_ini, mnp.MNP_STORICO_RICH_REC_VIRT stor_rec_virt_fin WHERE rich_rec_virt.ID_RICHIESTA = stor_rec_virt_ini.ID_RICHIESTA AND rich_rec_virt.ID_RICHIESTA = stor_rec_virt_fin.ID_RICHIESTA AND stor_rec_virt_ini.STATO_A = 6 ----VALIDAZIONE OK AND stor_rec_virt_fin.STATO_A =10 ----CESSATA AND rich_rec_virt.CODICE_OPERATORE_DONATING = 'TIMG' AND stor_rec_virt_fin.DATA_I_O ---PRENDO TUTTE LE TRANSIZIONI DEL 1-30 DEL MESE PRECEDENTE BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)); BEGIN cod_errore := 0; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); FOR rec IN record_sla LOOP n_rec := n_rec +1; IF FUN_GIORNI_LAVORATIVI (trunc(rec.tFinale) , trunc( rec.tIniziale)) -1 >2 then begin dataFinale:=fun_giorni_piu(rec.tIniziale,2); -- giorni_ritardo := TRUNC(rec.tFinale- fun_giorni_piu(rec.tIniziale,2) ); giorni_ritardo := TRUNC( trunc(rec.tFinale) - trunc(dataFinale) ); penale:= giorni_ritardo *50; numero_sim:=0; INSERT INTO MNP_DW_SLA_3GG_OUT ( ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE, RECIPIENT_RETE, TERZA_PARTE, PROCESSO, FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE, T_FINALE, DATA_CUT_OVER, MSISDN, ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN, MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME) VALUES ( rec.idRichiesta ,rec.tipoMessaggio ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.dataMessaggio ,rec.donorRete ,rec.recipientRete ,rec.terzaParte ,rec.processo ,0 --flagCalcoloNumSim ,rec.nomeFile ,rec.tIniziale ,rec.tFinale ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,giorni_ritardo ,penale ,numero_sim ,proc_name ); END; END IF; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: 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 record_sla%ISOPEN then CLOSE record_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA2_RECIPIENT_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLA2_REC_VIRT; procedure CARICAMENTO_SLA3_REC_VIRT(dataRif IN DATE,cod_errore OUT NUMBER) IS -- DA MODIFICARE!!! n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA3_REC_VIRT'; D_ini DATE; D_fine DATE; temp_data_fin DATE; ora_fin_ftemp1 CHAR(2); min_fin_ftemp1 CHAR(2); sec_fin_ftemp1 CHAR(2); dataFinale DATE; penale NUMBER; giorni_ritardo NUMBER; numero_sim NUMBER; CURSOR record_sla is SELECT rich_rec_virt.ID_RICHIESTA AS idRichiesta ,'SLA3' as tipoMessaggio ,xml_in.MITTENTE AS donorEffettivo -- forzatura terzaParte nel donating EFFETTIVO (al posto di rich_rec_virt.CODICE_OPERATORE_DONATING) per dbcgo ,rich_rec_virt.CODICE_OPERATORE_RECIPIENT AS recipientEffettivo ,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) as dataMessaggio ,'TIMG' AS donorRete ,'TIMG' AS recipientRete ,xml_in.MITTENTE as terzaParte ,'D' as processo ,0 as richiestaAdHocAom ,NULL as codiceGruppo ,ack_out.NOME_FILE as nomeFile ,stor_rec_virt.DATA_I_O as tIniziale ,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tFinale ,rich_rec_virt.DATA_CUT_OVER_CALC as dataCutOver ,rich_rec_virt.MSISDN as msIsdn ,NULL as ackIniziale ,NULL as ackFinale --,stor_rec_virt.DATA_I_O+2 as dataAttesaEventoFin ,TO_CHAR( to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) ,'MM/YYYY' ) AS meseCompFinale ,NULL AS nomeFileIniziale ,NULL AS nomeFileFinale ,to_date( SUBSTR( rich_in.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) as dataRicIn FROM mnp.MNP_GEST_RICH_REC_VIRT rich_rec_virt , mnp.MNP_STORICO_RICH_REC_VIRT stor_rec_virt, mnp.MNP_XML_ACK_OUT ack_out , mnp.MNP_XML_IN xml_in , mnp.MNP_XML_RICHIESTA_IN rich_in WHERE rich_rec_virt.ID_RICHIESTA = stor_rec_virt.ID_RICHIESTA AND stor_rec_virt.STATO_A = 13 ----ACCETTATA AND xml_in.TIPO_FILE = 6 -- ESPLETAMENTO AND ack_out.NOME_FILE_RIFERITO = rich_in.NOME_FILE AND xml_in.NOME_FILE = rich_in.NOME_FILE AND rich_in.ID_RICHIESTA = rich_rec_virt.ID_RICHIESTA AND rich_rec_virt.CODICE_OPERATORE_DONATING = 'TIMG' AND to_date( SUBSTR( ack_out.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)); BEGIN cod_errore := 0; ora_fin_ftemp1 := null; min_fin_ftemp1 := null; sec_fin_ftemp1 := null; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); 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 = 6; FOR rec IN record_sla LOOP n_rec := n_rec +1; IF rec.tFinale > TO_DATE ((TO_CHAR (rec.tFinale, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS') THEN temp_data_fin := rec.dataRicIn; ELSE temp_data_fin := rec.tFinale; END IF; IF FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc( rec.tIniziale)) -1 >2 then begin dataFinale:=fun_giorni_piu(rec.tIniziale,2); -- giorni_ritardo := TRUNC(temp_data_fin- fun_giorni_piu(rec.tIniziale,2) ); giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); penale:= giorni_ritardo *10; numero_sim:=0; INSERT INTO MNP_DW_SLA_3GG_OUT ( ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE, RECIPIENT_RETE, TERZA_PARTE, PROCESSO, FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE, T_FINALE, DATA_CUT_OVER, MSISDN, ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN, MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME) VALUES ( rec.idRichiesta ,rec.tipoMessaggio ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.dataMessaggio ,rec.donorRete ,rec.recipientRete ,rec.terzaParte ,rec.processo ,0 --flagCalcoloNumSim ,rec.nomeFile ,rec.tIniziale ,temp_data_fin ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,giorni_ritardo ,penale ,numero_sim ,proc_name ); END; END IF; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: 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 record_sla%ISOPEN then CLOSE record_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA2_RECIPIENT_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLA3_REC_VIRT; procedure CARICAMENTO_SLA1_REC_VIRT_M2M(dataRif IN DATE,cod_errore OUT NUMBER) IS n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA1_REC_VIRT_M2M'; D_ini DATE; D_fine DATE; dataFinale DATE; penale NUMBER; giorni_ritardo NUMBER; numero_sim NUMBER; CURSOR record_sla is SELECT rich_rec_virt.ID_RICHIESTA AS idRichiesta ,'SLA1' as tipoMessaggio ,rich_rec_virt.CODICE_OPERATORE_DONATING as donorEffettivo ,rich_rec_virt.CODICE_OPERATORE_RECIPIENT as recipientEffettivo ,stor_rec_virt_fin.DATA_I_O as dataMessaggio ,'TIMG' AS donorRete ,'TIMG' AS recipientRete ,NULL as terzaParte ,'V' as processo ,0 as richiestaAdHocAom ,NULL as codiceGruppo ,NULL as nomeFile ,stor_rec_virt_ini.DATA_I_O as tIniziale ,stor_rec_virt_fin.DATA_I_O as tFinale ,rich_rec_virt.DATA_CUT_OVER_CALC as dataCutOver ,rich_rec_virt.MSISDN as msIsdn ,NULL as ackIniziale ,NULL as ackFinale --,stor_rec_virt_ini.DATA_I_O+1 as dataAttesaEventoFin ,TO_CHAR( stor_rec_virt_fin.DATA_I_O ,'MM/YYYY' ) AS meseCompFinale ,NULL AS nomeFileIniziale ,NULL AS nomeFileFinale FROM mnp.MNP_GEST_RICH_REC_VIRT rich_rec_virt , mnp.MNP_STORICO_RICH_REC_VIRT stor_rec_virt_ini, mnp.MNP_STORICO_RICH_REC_VIRT stor_rec_virt_fin WHERE rich_rec_virt.ID_RICHIESTA = stor_rec_virt_ini.ID_RICHIESTA AND rich_rec_virt.ID_RICHIESTA = stor_rec_virt_fin.ID_RICHIESTA AND stor_rec_virt_ini.STATO_A = 2 ----LAVORABILE AND stor_rec_virt_fin.STATO_A IN (6,7) ----VALIDAZIONE OK/KO AND rich_rec_virt.CODICE_OPERATORE_DONATING <> 'TIMG' AND stor_rec_virt_fin.DATA_I_O ---PRENDO TUTTE LE TRANSIZIONI DEL 1-30 DEL MESE PRECEDENTE BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)); BEGIN cod_errore := 0; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); FOR rec IN record_sla LOOP n_rec := n_rec +1; IF FUN_GIORNI_LAVORATIVI (trunc(rec.tFinale) , trunc( rec.tIniziale)) -1 >1 then begin dataFinale:=fun_giorni_piu(rec.tIniziale,1); -- giorni_ritardo := TRUNC(rec.tFinale- fun_giorni_piu(rec.tIniziale,1) ); giorni_ritardo := TRUNC( trunc(rec.tFinale) - trunc(dataFinale) ); penale:= giorni_ritardo *50; numero_sim:=0; INSERT INTO MNP_DW_SLA_3GG_OUT ( ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE, RECIPIENT_RETE, TERZA_PARTE, PROCESSO, FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE, T_FINALE, DATA_CUT_OVER, MSISDN, ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN, MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME) VALUES ( rec.idRichiesta ,rec.tipoMessaggio ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.dataMessaggio ,rec.donorRete ,rec.recipientRete ,rec.terzaParte ,rec.processo ,0 --flagCalcoloNumSim ,rec.nomeFile ,rec.tIniziale ,rec.tFinale ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,giorni_ritardo ,penale ,numero_sim ,proc_name ); END; END IF; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: 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 record_sla%ISOPEN then CLOSE record_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA1_REC_VIRT_M2M ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLA1_REC_VIRT_M2M; procedure CARICAMENTO_SLA2_REC_VIRT_M2M(dataRif IN DATE,cod_errore OUT NUMBER) IS n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA2_REC_VIRT_M2M'; D_ini DATE; D_fine DATE; dataFinale DATE; penale NUMBER; giorni_ritardo NUMBER; numero_sim NUMBER; CURSOR record_sla is SELECT rich_rec_virt.ID_RICHIESTA AS idRichiesta ,'SLA2' as tipoMessaggio ,rich_rec_virt.CODICE_OPERATORE_DONATING as donorEffettivo ,rich_rec_virt.CODICE_OPERATORE_RECIPIENT as recipientEffettivo ,stor_rec_virt_fin.DATA_I_O as dataMessaggio ,'TIMG' AS donorRete ,'TIMG' AS recipientRete ,NULL as terzaParte ,'V' as processo ,0 as richiestaAdHocAom ,NULL as codiceGruppo ,NULL as nomeFile ,stor_rec_virt_ini.DATA_I_O as tIniziale ,stor_rec_virt_fin.DATA_I_O as tFinale ,rich_rec_virt.DATA_CUT_OVER_CALC as dataCutOver ,rich_rec_virt.MSISDN as msIsdn ,NULL as ackIniziale ,NULL as ackFinale --,stor_rec_virt_ini.DATA_I_O+2 as dataAttesaEventoFin ,TO_CHAR( stor_rec_virt_fin.DATA_I_O ,'MM/YYYY' ) AS meseCompFinale ,NULL AS nomeFileIniziale ,NULL AS nomeFileFinale FROM mnp.MNP_GEST_RICH_REC_VIRT rich_rec_virt , mnp.MNP_STORICO_RICH_REC_VIRT stor_rec_virt_ini, mnp.MNP_STORICO_RICH_REC_VIRT stor_rec_virt_fin WHERE rich_rec_virt.ID_RICHIESTA = stor_rec_virt_ini.ID_RICHIESTA AND rich_rec_virt.ID_RICHIESTA = stor_rec_virt_fin.ID_RICHIESTA AND stor_rec_virt_ini.STATO_A = 6 ----VALIDAZIONE OK AND stor_rec_virt_fin.STATO_A =10 ----CESSATA AND rich_rec_virt.CODICE_OPERATORE_DONATING <> 'TIMG' AND stor_rec_virt_fin.DATA_I_O ---PRENDO TUTTE LE TRANSIZIONI DEL 1-30 DEL MESE PRECEDENTE BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)); BEGIN cod_errore := 0; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); FOR rec IN record_sla LOOP n_rec := n_rec +1; IF FUN_GIORNI_LAVORATIVI (trunc(rec.tFinale) , trunc( rec.tIniziale)) -1 >2 then begin dataFinale:=fun_giorni_piu(rec.tIniziale,2); --giorni_ritardo := TRUNC(rec.tFinale- fun_giorni_piu(rec.tIniziale,2) ); giorni_ritardo := TRUNC( trunc(rec.tFinale) - trunc(dataFinale) ); penale:= giorni_ritardo *50; numero_sim:=0; INSERT INTO MNP_DW_SLA_3GG_OUT ( ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE, RECIPIENT_RETE, TERZA_PARTE, PROCESSO, FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE, T_FINALE, DATA_CUT_OVER, MSISDN, ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN, MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME) VALUES ( rec.idRichiesta ,rec.tipoMessaggio ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.dataMessaggio ,rec.donorRete ,rec.recipientRete ,rec.terzaParte ,rec.processo ,0 --flagCalcoloNumSim ,rec.nomeFile ,rec.tIniziale ,rec.tFinale ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,giorni_ritardo ,penale ,numero_sim ,proc_name ); END; END IF; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: 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 record_sla%ISOPEN then CLOSE record_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA2_RECIPIENT_VIRT_M2M ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLA2_REC_VIRT_M2M; procedure CARICAMENTO_SLA3_REC_VIRT_M2M(dataRif IN DATE,cod_errore OUT NUMBER) IS n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA3_REC_VIRT_M2M'; D_ini DATE; D_fine DATE; temp_data_fin DATE; ora_fin_ftemp1 CHAR(2); min_fin_ftemp1 CHAR(2); sec_fin_ftemp1 CHAR(2); dataFinale DATE; penale NUMBER; giorni_ritardo NUMBER; numero_sim NUMBER; CURSOR record_sla is SELECT rich_rec_virt.ID_RICHIESTA AS idRichiesta ,'SLA3' as tipoMessaggio ,xml_in.MITTENTE as donorEffettivo --forzatura terzaParte per dbcgo al posto di rich_rec_virt.CODICE_OPERATORE_DONATING ,rich_rec_virt.CODICE_OPERATORE_RECIPIENT as recipientEffettivo ,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio ,'TIMG' AS donorRete ,'TIMG' AS recipientRete ,xml_in.MITTENTE as terzaParte ,'V' as processo ,0 as richiestaAdHocAom ,NULL as codiceGruppo ,ack_out.NOME_FILE as nomeFile ,stor_rec_virt.DATA_I_O as tIniziale ,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tFinale ,rich_rec_virt.DATA_CUT_OVER_CALC as dataCutOver ,rich_rec_virt.MSISDN as msIsdn ,NULL as ackIniziale ,NULL as ackFinale --,stor_rec_virt.DATA_I_O+2 as dataAttesaEventoFin , TO_CHAR( to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) ,'MM/YYYY' ) AS meseCompFinale ,NULL AS nomeFileIniziale ,NULL AS nomeFileFinale ,to_date( SUBSTR( rich_in.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) AS dataRicIn FROM mnp.MNP_GEST_RICH_REC_VIRT rich_rec_virt , mnp.MNP_STORICO_RICH_REC_VIRT stor_rec_virt, mnp.MNP_XML_ACK_OUT ack_out , mnp.MNP_XML_IN xml_in , mnp.MNP_XML_RICHIESTA_IN rich_in WHERE rich_rec_virt.ID_RICHIESTA = stor_rec_virt.ID_RICHIESTA AND stor_rec_virt.STATO_A = 13 ----ACCETTATA AND xml_in.TIPO_FILE = 6 -- ESPLETAMENTO AND ack_out.NOME_FILE_RIFERITO = rich_in.NOME_FILE AND xml_in.NOME_FILE = rich_in.NOME_FILE AND rich_in.ID_RICHIESTA = rich_rec_virt.ID_RICHIESTA AND rich_rec_virt.CODICE_OPERATORE_DONATING <> 'TIMG' AND to_date( SUBSTR( ack_out.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)); BEGIN cod_errore := 0; ora_fin_ftemp1 := null; min_fin_ftemp1 := null; sec_fin_ftemp1 := null; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); 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 = 6; FOR rec IN record_sla LOOP n_rec := n_rec +1; IF rec.tFinale > TO_DATE ((TO_CHAR (rec.tFinale, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS') THEN temp_data_fin := rec.dataRicIn; ELSE temp_data_fin := rec.tFinale; END IF; IF FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc( rec.tIniziale)) -1 >2 then begin dataFinale:=fun_giorni_piu(rec.tIniziale,2); -- giorni_ritardo := TRUNC(temp_data_fin- fun_giorni_piu(rec.tIniziale,2) ); giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); penale:= giorni_ritardo *10; numero_sim:=0; INSERT INTO MNP_DW_SLA_3GG_OUT ( ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO, RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE, RECIPIENT_RETE, TERZA_PARTE, PROCESSO, FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE, T_FINALE, DATA_CUT_OVER, MSISDN, ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN, MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME) VALUES ( rec.idRichiesta ,rec.tipoMessaggio ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.dataMessaggio ,rec.donorRete ,rec.recipientRete ,rec.terzaParte ,rec.processo ,0 --flagCalcoloNumSim ,rec.nomeFile ,rec.tIniziale ,temp_data_fin ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,giorni_ritardo ,penale ,numero_sim ,proc_name ); END; END IF; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: 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 record_sla%ISOPEN then CLOSE record_sla; end if; cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA2_RECIPIENT_VIRT_M2M ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLA3_REC_VIRT_M2M; procedure CALCOLO_SLA_PENALI(dataRif IN Date) IS cod_errore NUMBER (1); cod_errore_sla0_don NUMBER (1); cod_errore_sla1_don NUMBER (1); cod_errore_sla2_don NUMBER (1); cod_errore_sla3_don NUMBER (1); cod_errore_sla0_rec NUMBER (1); cod_errore_sla1_rec NUMBER (1); cod_errore_sla2_rec NUMBER (1); cod_errore_sla3_rec NUMBER (1); cod_errore_sla1_don_virt NUMBER (1); cod_errore_sla2_don_virt NUMBER (1); cod_errore_sla3_don_virt NUMBER (1); cod_errore_sla1_rec_virt NUMBER (1); cod_errore_sla2_rec_virt NUMBER (1); cod_errore_sla3_rec_virt NUMBER (1); cod_errore_sla1_rec_virt_M2M NUMBER (1); cod_errore_sla2_rec_virt_M2M NUMBER (1); cod_errore_sla3_rec_virt_M2M NUMBER (1); errore_calcolo_sla0 NUMBER (1); errore_calcolo_sla1 NUMBER (1); errore_calcolo_sla2 NUMBER (1); errore_calcolo_sla3 NUMBER (1); n_rec integer := 0; proc_name constant varchar2(30) := 'CALCOLO_SLA_PENALI'; D_ini DATE; D_fine DATE; BEGIN dbms_output.enable(9999999); D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCESSO '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); ----------------------------------------------------- -- DELETE PREVENTIVA DELLE TABELLA PENALI ----------------------------------------------------- DELETE MNP_DW_SLA_3GG_OUT WHERE TO_CHAR(DATA_MESSAGGIO,'mm/yyyy')=TO_CHAR(ADD_MONTHS(dataRif,-1),'mm/yyyy'); cod_errore := 0; -- caricamento dati per il processo donor nella tabella MNP_DW_SLA_3GG_OUT caricamento_sla0_donor(dataRif,cod_errore_sla0_don); caricamento_sla1_donor(dataRif,cod_errore_sla1_don); caricamento_sla2_donor(dataRif,cod_errore_sla2_don); caricamento_sla3_donor(dataRif,cod_errore_sla3_don); -- caricamento dati per il processo recipient nella tabella MNP_DW_SLA_3GG_OUT caricamento_sla0_recipient(dataRif,cod_errore_sla0_rec); caricamento_sla1_recipient(dataRif,cod_errore_sla1_rec); caricamento_sla2_recipient(dataRif,cod_errore_sla2_rec); caricamento_sla3_recipient(dataRif,cod_errore_sla3_rec); -- caricamento dati per il processo donor virtuale nella tabella MNP_DW_SLA_3GG_OUT caricamento_sla1_donor_virt(dataRif,cod_errore_sla1_don_virt); caricamento_sla2_donor_virt(dataRif,cod_errore_sla2_don_virt); caricamento_sla3_donor_virt(dataRif,cod_errore_sla3_don_virt); -- caricamento dati per il processo recipient virtuale nella tabella MNP_DW_SLA_3GG_OUT caricamento_sla1_rec_virt(dataRif,cod_errore_sla1_rec_virt); caricamento_sla2_rec_virt(dataRif,cod_errore_sla2_rec_virt); caricamento_sla3_rec_virt(dataRif,cod_errore_sla3_rec_virt); -- caricamento dati per il processo recipient virtuale nella tabella MNP_DW_SLA_3GG_OUT caricamento_sla1_rec_virt_M2M(dataRif,cod_errore_sla1_rec_virt_M2M); caricamento_sla2_rec_virt_M2M(dataRif,cod_errore_sla2_rec_virt_M2M); caricamento_sla3_rec_virt_M2M(dataRif,cod_errore_sla3_rec_virt_M2M); 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_rec_virt_M2M + cod_errore_sla2_rec_virt_M2M + cod_errore_sla3_rec_virt_M2M + cod_errore_sla1_don_virt + cod_errore_sla2_don_virt + cod_errore_sla3_don_virt + errore_calcolo_sla0 +errore_calcolo_sla1 +errore_calcolo_sla2 + errore_calcolo_sla3 ; 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_PENALI_3GG: 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 CALCOLO_SLA_PENALI; END PKG_CALCOLO_SLA_PENALI_3GG; /