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_ftempH CHAR(2); min_fin_ftempH CHAR(2); sec_fin_ftempH CHAR(2); ora_fin_ftemp2 CHAR(2); min_fin_ftemp2 CHAR(2); sec_fin_ftemp2 CHAR(2); n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA0_RECIPIENT'; D_ini DATE; D_fine DATE; l_penale NUMBER; l_giorni_ritardo NUMBER; l_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.RICHIESTAADHOC AS richiestaAdHoc ,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_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 IN( 1, 9 ) ----ATTIVAZIONE progetti STD e HOC 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 9 ATTIVAZIONE P.HOC SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftempH,min_fin_ftempH,sec_fin_ftempH FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 9; -- 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; -- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO IF TRIM(rec.codiceGruppo) IS NOT NULL AND (rec.richiestaAdHocAom > 0 or rec.richiestaAdHoc >0) THEN flagCalcoloNumSim:=1; ELSE flagCalcoloNumSim:=0; END IF; if flagCalcoloNumSim=0 then BEGIN -- 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 := dwh.FUN_DATE_FESTIVE_SUCC (rec.tIniziale); END IF; END; ELSE BEGIN -- SE IL FILE '9' 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_ftempH ||min_fin_ftempH||sec_fin_ftempH),'YYYYMMDDHH24MISS') THEN temp_data_in := dwh.FUN_GIORNI_PIU(rec.tIniziale, 1); ELSE temp_data_in := dwh.FUN_DATE_FESTIVE_SUCC (rec.tIniziale); END IF; END; END IF; -- SE IL FILE '5' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE E LA CHIUSURA E' ALLE 24.00, SIAMO GIA' AL GIORNO SUCCESSIVO. -- NON E' NECESSARIO PERTANTO AGGIUNGERE GIORNATE. IL PRIMO CONTROLLO VERRA' ADOPERATO SOLO IN CASO DI VARIAZIONE DI FINESTRA TEMPORALE 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 -- FORSE IL FILE E' ARRIVATO A MEZZANOTTE E 20 DEL GIORNO DOPO..... MA FORSE IL GIORNO DOPO E' SABATO! CHE SFIGA! temp_data_fin := FUN_DATE_FESTIVE_SUCC(rec.tFinale); 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 */ l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); l_penale:= l_giorni_ritardo *50; -- if flagCalcoloNumSim = 1 -- THEN SELECT COUNT(*) -- INTO l_numero_sim -- FROM mnp.mnp_gestione_richiesta_rec c -- WHERE c.CODICE_GRUPPO=rec.codiceGruppo -- AND (c.RICHIESTAADHOCAOM > 0 or c.RICHIESTAADHOC >0); -- ELSE l_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 ,l_giorni_ritardo ,l_penale ,l_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 AND DONOR_RETE=rec.donorRete; -- 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=l_giorni_ritardo ,PENALE=l_penale ,NUMERO_SIM=l_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 AND DONOR_RETE=rec.donorRete; 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; ackFinaleLetto VARCHAR2(27); fileFinaleLetto 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); ora_fin_ftempH CHAR(2); min_fin_ftempH CHAR(2); sec_fin_ftempH CHAR(2); n_rec integer := 0; flagStop integer :=0; num_validazioni NUMBER(1):=0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA1_RECIPIENT'; D_ini DATE; D_fine DATE; dataFinale DATE; l_penale NUMBER; l_giorni_ritardo NUMBER; l_numero_sim NUMBER; -- @FATTO AGGIUNGERE UNA SOTTOQUERY CHE, PER XML_IN (FILE DI VALIDAZIONE) ESTRAGGA LA MAX SULLA DATA DEL NOME FILE 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.RICHIESTAADHOC AS richiestaAdHoc ,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_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 IN (1,9) ---ATTIVAZIONE progetti STD e HOC 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)); --and xml_in.NOME_FILE = (select MAX(X.NOME_FILE) -- FROM mnp.MNP_XML_IN x, mnp.MNP_XML_RICHIESTA_IN y -- WHERE y.ID_RICHIESTA= rich_in.ID_RICHIESTA -- AND x.TIPO_FILE=2 --validazione -- AND y.NOME_FILE = x.NOME_FILE -- ); 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; -- @todoPROBABILMENTE NON E' IL MODO GIUSTO PER CALCOLARE LA FINESTRA CHE DOVREBBE ESSERE 04.00->10.00 (INFASAMENTO TABELLA?) SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftemp1,min_fin_ftemp1,sec_fin_ftemp1 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 1; -- RICAVA FINESTRE TEMPORALI PER TIPO FILE 9 ATTIVAZIONE P.HOC SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftempH,min_fin_ftempH,sec_fin_ftempH FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 9; 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 flagStop:=0; n_rec := n_rec +1; -- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO IF TRIM(rec.codiceGruppo) IS NOT NULL AND (rec.richiestaAdHocAom > 0 or rec.richiestaAdHoc >0) THEN flagCalcoloNumSim:=1; ELSE flagCalcoloNumSim:=0; END IF; if flagCalcoloNumSim=0 then begin 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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale); END IF; end; else begin IF rec.tIniziale > TO_DATE ((TO_CHAR (rec.tIniziale, 'YYYYMMDD')||ora_fin_ftempH ||min_fin_ftempH||sec_fin_ftempH),'YYYYMMDDHH24MISS') THEN temp_data_in := dwh.FUN_GIORNI_PIU(rec.tIniziale, 1); ELSE temp_data_in := dwh.FUN_DATE_FESTIVE_SUCC (rec.tIniziale); END IF; end; end if; -- SE TFINALE FUORI FINESTRA USA LA DATA DEL FILE DI VALIDAZIONE 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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tFinale); END IF; if FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc(temp_data_in)) -1 >1 then begin IF (rec.richiestaadhocaom > 0 OR rec.richiestaadhoc > 0) THEN BEGIN SELECT COUNT (*) INTO num_validazioni FROM mnp.mnp_xml_in xml, mnp.mnp_xml_richiesta_in richin WHERE richin.id_richiesta = rec.idrichiesta AND xml.tipo_file = 2 AND xml.nome_file = richin.nome_file AND xml.nome_file < rec.nomefilefinale; IF num_validazioni > 0 THEN BEGIN flagstop := 1; END; END IF; END; END IF; IF FLAgstop = 0 then BEGIN --iniZXIA QUI dataFinale:=fun_giorni_piu(temp_data_in,1); /*data attesa evento finale*/ l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); l_penale:= l_giorni_ritardo *50; -- if flagCalcoloNumSim = 1 -- THEN -- begin -- SELECT COUNT(*) -- INTO l_numero_sim -- FROM mnp.mnp_gestione_richiesta_rec c -- WHERE c.CODICE_GRUPPO=rec.codiceGruppo -- AND (c.RICHIESTAADHOCAOM > 0 or c.RICHIESTAADHOC >0); -- end; -- ELSE l_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 ,l_giorni_ritardo ,l_penale ,l_numero_sim ,proc_name ); EXCEPTION WHEN dup_val_on_index THEN BEGIN -- lettura dati preesistenti SELECT ACK_FINALE,NOME_FILE_FINALE INTO ackFinaleLetto, fileFinaleLetto 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 AND DONOR_RETE=rec.donorRete; -- gestisco la data di prima validazione IF (to_date( SUBSTR( rec.nomeFileFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(fileFinaleLetto, 5 , 14) ,'YYYYMMDDHH24MISS' )) OR (to_date( SUBSTR( rec.nomeFileFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) = to_date( SUBSTR(fileFinaleLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ) AND to_date( SUBSTR( rec.ackFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(ackFinaleLetto, 5 , 14) ,'YYYYMMDDHH24MISS' )) THEN IF FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc( temp_data_in)) -1 >1 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=l_giorni_ritardo ,PENALE=l_penale ,NUMERO_SIM=l_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 AND DONOR_RETE = rec.donorRete; ELSE DELETE 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 AND DONOR_RETE = rec.donorRete; END IF; END IF; END; END; --FINISCE QUI END IF; 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_in DATE; temp_data_fin DATE; ora_fin_ftemp CHAR(2); min_fin_ftemp CHAR(2); sec_fin_ftemp 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_RECIPIENT'; D_ini DATE; D_fine DATE; dataFinale DATE; l_penale NUMBER; l_giorni_ritardo NUMBER; l_numero_sim NUMBER; -- @FATTO deve fare la max sul nome del file di xml_in (QUINDI LA MAX SU RICH_IN NOME FILE) 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.RICHIESTAADHOC AS richiestaAdHoc ,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_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 xml_in.TIPO_FILE =2----VALIDAZIONE AND ack_out.NOME_FILE_RIFERITO = rich_in.NOME_FILE AND ack_out.NOME_FILE = xml_out.nome_file 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)) and xml_in.NOME_FILE = (select MAX(X.NOME_FILE) FROM mnp.MNP_XML_IN x, mnp.MNP_XML_RICHIESTA_IN y WHERE y.ID_RICHIESTA= rich_in.ID_RICHIESTA AND x.TIPO_FILE=2 --validazione AND y.NOME_FILE = x.NOME_FILE ); 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; 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_ftemp2,min_fin_ftemp2,sec_fin_ftemp2 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_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.tIniziale > TO_DATE ((TO_CHAR (rec.tIniziale, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS') THEN temp_data_in := dwh.FUN_GIORNI_PIU(rec.tIniziale, 1); ELSE temp_data_in := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale); END IF; IF rec.tFinale > TO_DATE ((TO_CHAR (rec.tFinale, 'YYYYMMDD')||ora_fin_ftemp ||min_fin_ftemp||sec_fin_ftemp),'YYYYMMDDHH24MISS') --data file espletamento THEN temp_data_fin := dwh.FUN_GIORNI_PIU(rec.tFinale, 1); ELSE temp_data_fin := dwh.FUN_DATE_FESTIVE_SUCC(rec.tFinale); END IF; -- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO IF TRIM(rec.codiceGruppo) IS NOT NULL AND (rec.richiestaAdHocAom > 0 or rec.richiestaAdHoc >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); l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); l_penale:= l_giorni_ritardo *50; -- if flagCalcoloNumSim = 1 -- THEN SELECT COUNT(*) -- INTO l_numero_sim -- FROM mnp.mnp_gestione_richiesta_rec c -- WHERE c.CODICE_GRUPPO=rec.codiceGruppo -- AND c.RICHIESTAADHOCAOM > 0; -- ELSE l_numero_sim := 0; -- END IF; -- @FATTO deve gestire la chiave duplicata ed aggiornare quando la data dell'ack_in è minore della data dell'ack_in letto (primo ack) 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 ,l_giorni_ritardo ,l_penale ,l_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 AND DONOR_RETE=rec.donorRete; -- 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=l_giorni_ritardo ,PENALE=l_penale ,NUMERO_SIM=l_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 AND DONOR_RETE=rec.donorRete; 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_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_in DATE; temp_data_fin DATE; ora_fin_ftemp2 CHAR(2); min_fin_ftemp2 CHAR(2); sec_fin_ftemp2 CHAR(2); 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; l_penale NUMBER; l_giorni_ritardo NUMBER; l_numero_sim NUMBER; -- @FATTO su xml_out eliminare destinatario NPTS CURSOR record_sla is SELECT rich_out.ID_RICHIESTA AS idRichiesta ,'SLA3' as tipoMessaggio ,rich_rec.CODICE_OPERATORE_DON_EFF AS donorEffettivo -- rif. email Letizia 29/9/10 era null ,rich_rec.CODICE_OPERATORE_REC_EFF AS recipientEffettivo ,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio ,xml_in.MITTENTE AS donorRete -- rif. email Letizia 29/9/10 era rich_rec.CODICE_OPERATORE_DONOR ,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.RICHIESTAADHOC AS richiestaAdHoc ,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_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_out.DESTINATARIO <> 'NPTS' 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 xml_out.destinatario = xml_in.mittente 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')); 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_ftemp2,min_fin_ftemp2,sec_fin_ftemp2 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_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.tIniziale > TO_DATE ((TO_CHAR (rec.tIniziale, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS') THEN temp_data_in := dwh.FUN_GIORNI_PIU(rec.tIniziale, 1); ELSE temp_data_in := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale); END IF; IF rec.tFinale > TO_DATE ((TO_CHAR (rec.tFinale, 'YYYYMMDD')||ora_fin_ftemp ||min_fin_ftemp||sec_fin_ftemp),'YYYYMMDDHH24MISS') THEN temp_data_fin := dwh.FUN_GIORNI_PIU(rec.tFinale, 1); ELSE temp_data_fin := dwh.FUN_DATE_FESTIVE_SUCC(rec.tFinale); END IF; -- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO IF TRIM(rec.codiceGruppo) IS NOT NULL AND (rec.richiestaAdHocAom > 0 or rec.richiestaAdHoc >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); --qui l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); --qui l_penale:= l_giorni_ritardo *10; -- if flagCalcoloNumSim = 1 -- THEN SELECT COUNT(*) -- INTO l_numero_sim -- FROM mnp.mnp_gestione_richiesta_rec c -- WHERE c.CODICE_GRUPPO=rec.codiceGruppo -- AND (c.RICHIESTAADHOCAOM > 0 or c.RICHIESTAADHOC >0); -- ELSE l_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 ,l_giorni_ritardo ,l_penale ,l_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 AND DONOR_RETE=rec.donorRete; -- 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=l_giorni_ritardo ,PENALE=l_penale ,NUMERO_SIM=l_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 AND DONOR_RETE=rec.donorRete; 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_ftempH CHAR(2); min_fin_ftempH CHAR(2); sec_fin_ftempH CHAR(2); ora_fin_ftemp2 CHAR(2); min_fin_ftemp2 CHAR(2); sec_fin_ftemp2 CHAR(2); n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA0_DONOR'; D_ini DATE; D_fine DATE; dataFinale DATE; l_penale NUMBER; l_giorni_ritardo NUMBER; l_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.RICHIESTAADHOC AS richiestaAdHoc ,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_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 IN(1,9) --ATTIVAZIONE progetti STD e HOC 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; -- RICAVA FINESTRE TEMPORALI PER TIPO FILE 9 ATTIVAZIONE P.HOC SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftempH,min_fin_ftempH,sec_fin_ftempH FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 9; -- per pic presa dal nome file out non sono previsti i 15 minuti SELECT SUBSTR(T_FINALE, 1,2), SUBSTR(T_FINALE, 4,2), SUBSTR(T_FINALE, 7,2) INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 5; FOR rec IN record_sla LOOP n_rec := n_rec +1; -- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO IF TRIM(rec.codiceGruppo) IS NOT NULL AND (rec.richiestaAdHocAom > 0 or rec.richiestaAdHoc >0) THEN flagCalcoloNumSim:=1; ELSE flagCalcoloNumSim:=0; END IF; if flagCalcoloNumSim=0 then BEGIN 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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale); END IF; END; ELSE BEGIN IF rec.tIniziale > TO_DATE ((TO_CHAR (rec.tIniziale, 'YYYYMMDD')||ora_fin_ftempH ||min_fin_ftempH||sec_fin_ftempH),'YYYYMMDDHH24MISS') THEN temp_data_in := DWH.FUN_GIORNI_PIU (rec.tIniziale, 1); ELSE temp_data_in := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale); END IF; END; end if; -- SE IL FILE '5' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE E LA CHIUSURA E' ALLE 24.00, SIAMO GIA' AL GIORNO SUCCESSIVO. -- NON E' NECESSARIO PERTANTO AGGIUNGERE GIORNATE. IL PRIMO CONTROLLO VERRA' ADOPERATO SOLO IN CASO DI VARIAZIONE DI FINESTRA TEMPORALE 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 -- FORSE IL FILE E' ARRIVATO A MEZZANOTTE E 20 DEL GIORNO DOPO..... MA FORSE IL GIORNO DOPO E' SABATO! CHE SFIGA! temp_data_fin := FUN_DATE_FESTIVE_SUCC(rec.tFinale); 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); l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); l_penale:= l_giorni_ritardo *50; -- if flagCalcoloNumSim = 1 -- THEN SELECT COUNT(*) -- INTO l_numero_sim -- FROM mnp.mnp_gestione_richiesta c -- WHERE c.CODICE_GRUPPO=rec.codiceGruppo -- AND (c.RICHIESTAADHOCAOM > 0 or c.RICHIESTAADHOC >0); -- ELSE l_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 ,l_giorni_ritardo ,l_penale ,l_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 ackFinaleLetto VARCHAR2(27); fileFinaleLetto 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_ftempH CHAR(2); min_fin_ftempH CHAR(2); sec_fin_ftempH CHAR(2); ora_fin_ftemp2 CHAR(2); min_fin_ftemp2 CHAR(2); sec_fin_ftemp2 CHAR(2); n_rec integer := 0; flagStop integer := 0; num_validazioni NUMBER(1):=0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA1_DONOR'; D_ini DATE; D_fine DATE; dataFinale DATE; l_penale NUMBER; l_giorni_ritardo NUMBER; l_numero_sim NUMBER; -- @TODO BY ALE AGGIUNGERE UNA SOTTOQUERY CHE, PER XML_OUT (FILE DI VALIDAZIONE) ESTRAGGA LA MAX SULLA DATA DEL NOME FILE? 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.RICHIESTAADHOC AS richiestaAdHoc ,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_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 IN(1,9) --ATTIVAZIONE progetti STD e HOC 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)); /*and xml_out.NOME_FILE = (select MAX(X.NOME_FILE) FROM mnp.MNP_XML_OUT x, mnp.MNP_XML_RICHIESTA_OUT y WHERE y.ID_RICHIESTA= rich_in.ID_RICHIESTA AND x.TIPO_FILE=2 --validazione AND y.NOME_FILE = x.NOME_FILE ); */ 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; -- RICAVA FINESTRE TEMPORALI PER TIPO FILE 9 ATTIVAZIONE P.HOC SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2) INTO ora_fin_ftempH,min_fin_ftempH,sec_fin_ftempH FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 9; -- per validazione presa dal nome file out non sono previsti i 15 minuti SELECT SUBSTR(T_FINALE, 1,2), SUBSTR(T_FINALE, 4,2), SUBSTR(T_FINALE, 7,2) INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 2; FOR rec IN record_sla LOOP flagStop:=0; n_rec := n_rec +1; -- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO IF TRIM(rec.codiceGruppo) IS NOT NULL AND (rec.richiestaAdHocAom > 0 or rec.richiestaAdHoc >0) THEN flagCalcoloNumSim:=1; ELSE flagCalcoloNumSim:=0; END IF; if flagCalcoloNumSim = 0 then begin 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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale); END IF; end; else begin IF rec.tIniziale > TO_DATE ((TO_CHAR (rec.tIniziale, 'YYYYMMDD')||ora_fin_ftempH ||min_fin_ftempH||sec_fin_ftempH),'YYYYMMDDHH24MISS') THEN temp_data_in := DWH.FUN_GIORNI_PIU (rec.tIniziale, 1); ELSE temp_data_in := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale); END IF; end; 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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tFinale); END IF; IF FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc( temp_data_in)) -1 >1 THEN BEGIN IF (rec.richiestaadhocaom > 0 OR rec.richiestaadhoc > 0) THEN BEGIN SELECT count(*) INTO num_validazioni FROM mnp.MNP_XML_OUT xml, mnp.MNP_XML_RICHIESTA_OUT richOut WHERE richOut.ID_RICHIESTA = rec.idRichiesta AND xml.TIPO_FILE = 2 AND xml.NOME_FILE = richOut.NOME_FILE AND xml.NOME_FILE < rec.nomeFileFinale; IF num_validazioni > 0 THEN BEGIN flagstop := 1; END; END IF; END; END IF; IF flagStop = 0 THEN BEGIN dataFinale:=fun_giorni_piu( temp_data_in,1); l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); l_penale:= l_giorni_ritardo *50; -- if flagCalcoloNumSim = 1 -- THEN SELECT COUNT(*) -- INTO l_numero_sim -- FROM mnp.mnp_gestione_richiesta c -- WHERE c.CODICE_GRUPPO=rec.codiceGruppo -- AND (c.RICHIESTAADHOCAOM > 0 or c.RICHIESTAADHOC >0); -- ELSE l_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 ,l_giorni_ritardo ,l_penale ,l_numero_sim ,proc_name ); EXCEPTION WHEN dup_val_on_index THEN BEGIN -- lettura dati preesistenti SELECT NOME_FILE_FINALE, ACK_FINALE INTO fileFinaleLetto, ackFinaleLetto 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 AND DONOR_RETE='TIMG'; -- se data del file della nuova riga < data del file preesistente oppure se la data del file è la stessa e la data dell'ack della -- nuova riga < data ack preesistente devo aggiornare IF (to_date( SUBSTR( rec.nomeFileFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(fileFinaleLetto, 5 , 14) ,'YYYYMMDDHH24MISS' )) OR (to_date( SUBSTR( rec.nomeFileFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) = to_date( SUBSTR(fileFinaleLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ) AND to_date( SUBSTR( rec.ackFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(ackFinaleLetto, 5 , 14) ,'YYYYMMDDHH24MISS' )) THEN IF FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc( temp_data_in)) -1 >1 THEN UPDATE MNP_DW_SLA_3GG_OUT SET DATA_MESSAGGIO = rec.dataMessaggio ,FLAG_CALCOLO_NUMSIM = flagCalcoloNumSim ,NOME_FILE = rec.nomeFile ,T_FINALE=temp_data_fin ,DATA_CUT_OVER=rec.dataCutOver ,ACK_FINALE=rec.ackFinale ,DATA_ATTESA_EVENTO_FIN=dataFinale ,MESE_COMP_FINALE=rec.meseCompFinale ,NOME_FILE_FINALE=rec.nomeFileFinale ,NUMERO_GIORNI_RITARDO=l_giorni_ritardo ,PENALE=l_penale ,NUMERO_SIM=l_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 AND DONOR_RETE='TIMG'; ELSE DELETE 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 AND DONOR_RETE='TIMG'; END IF; END IF; END; END; --qui finisce il fuori sl END IF; --qui finisce se flag stop = 0 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); fileInizialeLetto 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; l_penale NUMBER; l_giorni_ritardo NUMBER; l_numero_sim NUMBER; --@TODO BY ALE AGGIUNGERE UNA SOTTOQUERY CHE, PER XML_OUT (FILE DI VALIDAZIONE) ESTRAGGA LA MAX SULLA DATA DEL NOME FILE? 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.RICHIESTAADHOC AS richiestaAdHoc ,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 ,ack_in_fin.NOME_FILE AS ackFinale ,TO_CHAR ( TO_DATE( SUBSTR( xml_out_fin.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') AS meseCompFinale ,ack_in.NOME_FILE_RIFERITO 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)); -- and xml_out.NOME_FILE = (select MAX(X.NOME_FILE) -- FROM mnp.MNP_XML_OUT x, mnp.MNP_XML_RICHIESTA_OUT y -- WHERE y.ID_RICHIESTA= rich_out.ID_RICHIESTA -- AND x.TIPO_FILE=2 --validazione -- AND y.NOME_FILE = x.NOME_FILE -- ); 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; -- per espletamento preso dal nome file out non sono previsti i 15 minuti SELECT SUBSTR(T_FINALE, 1,2), SUBSTR(T_FINALE, 4,2), SUBSTR(T_FINALE, 7,2) INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 6; 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 := dwh.FUN_DATE_FESTIVE_SUCC(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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tFinale); END IF; -- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO IF TRIM(rec.codiceGruppo) IS NOT NULL AND (rec.richiestaAdHocAom > 0 or rec.richiestaAdHoc >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); l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); l_penale:=l_giorni_ritardo*50; -- if flagCalcoloNumSim = 1 -- THEN SELECT COUNT(*) -- INTO l_numero_sim -- FROM mnp.mnp_gestione_richiesta c -- WHERE c.CODICE_GRUPPO=rec.codiceGruppo -- AND (c.RICHIESTAADHOCAOM > 0 or c.RICHIESTAADHOC >0); -- ELSE l_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 ,l_giorni_ritardo ,l_penale ,l_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, NOME_FILE_INIZIALE INTO ackInizialeLetto, fileInizialeLetto 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 AND DONOR_RETE=rec.donorRete; -- 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?? -- gestisco la data di secoda validazione IF (to_date( SUBSTR( rec.nomeFileIniziale, 5 , 14) ,'YYYYMMDDHH24MISS' ) > to_date( SUBSTR(fileInizialeLetto, 5 , 14) ,'YYYYMMDDHH24MISS' )) OR (to_date( SUBSTR( rec.nomeFileIniziale, 5 , 14) ,'YYYYMMDDHH24MISS' ) = to_date( SUBSTR(fileInizialeLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ) AND 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=l_giorni_ritardo ,PENALE=l_penale ,NUMERO_SIM=l_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 AND DONOR_RETE=rec.donorRete; 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 AND DONOR_RETE=rec.donorRete; 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); fileFinaleLetto VARCHAR2(27); n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA3_DONOR'; D_ini DATE; D_fine DATE; dataFinale DATE; l_penale NUMBER; l_giorni_ritardo NUMBER; l_numero_sim NUMBER; --@FATTO FILTRATI I FLES DI NPTS. SUL TIPO 6 ESPLETAMENTO 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 ,'TIMG' as donorRete -- rif. email Letizia 27/9 era porting.CODICE_OPERATORE_DONATING AS donorRete ,porting.CODICE_OPERATORE_RECIPIENT AS recipientRete ,'TIMG' AS terzaParte -- rif. email Letizia 29/9/10 era null ,'D' as processo --,xml_out.TIPO_PROCESSO AS processo ,0 AS richiestaAdHocAom --, 0 as richiestaAdHoc ,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_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 xml_out.DESTINATARIO <> 'NPTS' --email Letizia 27/9 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; -- per espletamento preso dal nome file out non sono previsti i 15 minuti SELECT SUBSTR(T_FINALE, 1,2), SUBSTR(T_FINALE, 4,2), SUBSTR(T_FINALE, 7,2) INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2 FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI WHERE TIPO_FILE = 6; 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 := dwh.FUN_DATE_FESTIVE_SUCC(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 := dwh.FUN_DATE_FESTIVE_SUCC(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); l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); l_penale:= l_giorni_ritardo *10; l_numero_sim:=0; --@TODO BY ALE SLA3_RECIPIENT GESTISCE IL DUP_VAL_ON_INDEX SLA3_DONOR NO E' CORRETTO? 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 ,l_giorni_ritardo ,l_penale ,l_numero_sim ,proc_name ); EXCEPTION WHEN dup_val_on_index THEN BEGIN -- lettura dati preesistenti SELECT NOME_FILE_FINALE INTO fileFinaleLetto 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 AND DONOR_RETE='TIMG'; -- se data del file della nuova riga > data del file preesistente IF (to_date( SUBSTR( rec.nomeFileFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) > to_date( SUBSTR(fileFinaleLetto, 5 , 14) ,'YYYYMMDDHH24MISS' )) THEN UPDATE MNP_DW_SLA_3GG_OUT SET ID_RICHIESTA = rec.idRichiesta ,TIPO_MESSAGGIO = rec.tipoMessaggio ,DONOR_EFFETTIVO = rec.donorEffettivo ,RECIPIENT_EFFETTIVO = rec.recipientEffettivo ,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 = l_giorni_ritardo ,PENALE = l_penale ,NUMERO_SIM = l_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 AND DONOR_RETE='TIMG'; 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_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; l_penale NUMBER; l_giorni_ritardo NUMBER; l_numero_sim NUMBER; 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); temp_data_in DATE; temp_data_fin DATE; 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 ,'V' as processo , 0 as richiestaAdHocAom --, 0 as richiestaAdHoc , 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 ,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 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; 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')); -- RICAVA FINESTRE TEMPORALI PER TIPO FILE ? 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 ? 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; cod_errore := 0; FOR rec IN record_sla LOOP n_rec := n_rec +1; -- SE IL FILE '?' 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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale); END IF; -- SE IL FILE '?' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE, IMPOSTA T_FINALE ALLA DATA DEL FILE TIPO '5' 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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tFinale); 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); --qui l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); --qui l_penale:= l_giorni_ritardo *50; l_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 ,temp_data_in ,temp_data_fin ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,l_giorni_ritardo ,l_penale ,l_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; l_penale NUMBER; l_giorni_ritardo NUMBER; l_numero_sim NUMBER; dataFinale 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); temp_data_in DATE; temp_data_fin 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 ,'V' as processo ,0 as richiestaAdHocAom --, 0 as richiestaAdHoc ,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 ,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 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; 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')); -- RICAVA FINESTRE TEMPORALI PER TIPO FILE ? 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; -- RICAVA FINESTRE TEMPORALI PER TIPO FILE ? 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; cod_errore := 0; FOR rec IN record_sla LOOP n_rec := n_rec +1; -- SE IL FILE '?' 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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale); END IF; -- SE IL FILE '?' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE, IMPOSTA T_FINALE ALLA DATA DEL FILE TIPO '5' 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 := dwh.FUN_DATE_FESTIVE_SUCC(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); --qui l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); --qui l_penale:= l_giorni_ritardo *50; l_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 ,temp_data_in ,temp_data_fin ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,l_giorni_ritardo ,l_penale ,l_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_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); l_penale NUMBER; l_giorni_ritardo NUMBER; l_numero_sim NUMBER; dataFinale DATE; --@TODO BY ALE FORSE ANDRANNO FILTRATI I FLES DI NPTS. SUL TIPO 6 ESPLETAMENTO O SUL TIPO 3 PORTING ?? O FORSE NO? CURSOR record_sla is /* vecchia query SELECT rich_don_virt.ID_RICHIESTA AS idRichiesta ,'SLA3' as tipoMessaggio ,rich_don_virt.CODICE_OPERATORE_DONATING AS donorEffettivo -- rif. email Letizia 29/9/10 era XML_IN.MITTENTE ,rich_don_virt.CODICE_OPERATORE_RECIPIENT as recipientEffettivo ,to_date( SUBSTR( rich_in.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio ,xml_in.MITTENTE AS donorRete -- rif. email Letizia 29/9/10 era 'TIMG' ,'TIMG' AS recipientRete ,xml_in.MITTENTE AS terzaParte ,'R' as processo ,0 as richiestaAdHocAom --, 0 as richiestaAdHoc ,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 ,ack_out.nome_file as ackFinale ,TO_CHAR( to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) ,'MM/YYYY' ) as meseCompFinale ,NULL AS nomeFileIniziale ,xml_in.NOME_FILE 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)); */ SELECT rich_don_virt.ID_RICHIESTA AS idRichiesta ,'SLA3' as tipoMessaggio ,rich_don_virt.CODICE_OPERATORE_DONATING AS donorEffettivo -- rif. email Letizia 29/9/10 era XML_IN.MITTENTE ,rich_don_virt.CODICE_OPERATORE_RECIPIENT as recipientEffettivo ,to_date( SUBSTR( rich_in.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio ,xml_in.MITTENTE AS donorRete -- rif. email Letizia 29/9/10 era 'TIMG' ,'TIMG' AS recipientRete ,xml_in.MITTENTE AS terzaParte ,'R' as processo ,0 as richiestaAdHocAom --, 0 as richiestaAdHoc ,NULL 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_don_virt.DATA_CUT_OVER_CALC as dataCutOver ,rich_don_virt.MSISDN AS msIsdn ,ack_in.NOME_FILE as ackIniziale ,ack_out.nome_file as ackFinale ,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 FROM mnp.MNP_GEST_RICH_DONOR_VIRT rich_don_virt , mnp.MNP_XML_ACK_OUT ack_out , mnp.MNP_XML_IN xml_in , mnp.MNP_XML_RICHIESTA_IN rich_in, mnp.MNP_XML_ACK_IN ack_in , mnp.MNP_XML_RICHIESTA_OUT rich_out, mnp.MNP_XML_OUT xml_out where rich_out.id_richiesta = rich_in.id_richiesta AND ack_in.nome_file_riferito=rich_out.nome_file and rich_out.nome_file = xml_out.nome_file and xml_out.tipo_file = 3 --porting and xml_out.destinatario <> 'NPTS' and xml_out.destinatario = xml_in.mittente 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; temp_data_in := NULL; temp_data_fin := 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; -- RICAVA FINESTRE TEMPORALI PER TIPO FILE ? 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; cod_errore := 0; FOR rec IN record_sla LOOP n_rec := n_rec +1; -- SE IL FILE '?' 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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale); END IF; -- SE IL FILE '5' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE, IMPOSTA T_FINALE ALLA DATA DEL FILE TIPO '5' 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 := dwh.FUN_DATE_FESTIVE_SUCC(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); --qui l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); l_penale:= l_giorni_ritardo *10; l_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 ,temp_data_in ,temp_data_fin ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,l_giorni_ritardo ,l_penale ,l_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; l_penale NUMBER; l_giorni_ritardo NUMBER; l_numero_sim NUMBER; 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); temp_data_in DATE; temp_data_fin DATE; 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 --,0 as richiestaAdHoc ,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 ,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 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; 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')); -- RICAVA FINESTRE TEMPORALI PER TIPO FILE ? 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 ? 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; 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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale); END IF; -- SE IL FILE '5' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE, IMPOSTA T_FINALE ALLA DATA DEL FILE TIPO '5' 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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tFinale); 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); --qui l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); --qui l_penale:= l_giorni_ritardo *50; l_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 ,temp_data_in ,temp_data_fin ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,l_giorni_ritardo ,l_penale ,l_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; l_penale NUMBER; l_giorni_ritardo NUMBER; l_numero_sim NUMBER; 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); temp_data_in DATE; temp_data_fin DATE; 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 --,0 as richiestaAdHoc ,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 ,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 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; 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')); -- RICAVA FINESTRE TEMPORALI PER TIPO FILE ? 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; -- RICAVA FINESTRE TEMPORALI PER TIPO FILE ? 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; 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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale); END IF; -- SE IL FILE '5' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE, IMPOSTA T_FINALE ALLA DATA DEL FILE TIPO '5' 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 := dwh.FUN_DATE_FESTIVE_SUCC(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); --qui l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); --qui l_penale:= l_giorni_ritardo *50; l_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 ,temp_data_in ,temp_data_fin ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,l_giorni_ritardo ,l_penale ,l_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_in DATE; temp_data_fin DATE; ora_fin_ftemp1 CHAR(2); min_fin_ftemp1 CHAR(2); sec_fin_ftemp1 CHAR(2); dataFinale DATE; l_penale NUMBER; l_giorni_ritardo NUMBER; l_numero_sim NUMBER; ora_fin_ftemp2 CHAR(2); min_fin_ftemp2 CHAR(2); sec_fin_ftemp2 CHAR(2); CURSOR record_sla is /* vecchia query SELECT rich_rec_virt.ID_RICHIESTA AS idRichiesta ,'SLA3' as tipoMessaggio ,rich_rec_virt.CODICE_OPERATORE_DONATING AS donorEffettivo -- rif. email Letizia 29/9/10 era xml_in.MITTENTE ,rich_rec_virt.CODICE_OPERATORE_RECIPIENT AS recipientEffettivo ,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) as dataMessaggio ,xml_in.MITTENTE AS donorRete -- rif. email Letizia 29/9/10 era 'TIMG'' ,'TIMG' AS recipientRete ,xml_in.MITTENTE as terzaParte ,'R' as processo ,0 as richiestaAdHocAom --,0 as richiestaAdHoc ,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 ,ack_out.nome_file as ackFinale ,TO_CHAR( to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) ,'MM/YYYY' ) AS meseCompFinale ,NULL AS nomeFileIniziale ,xml_in.NOME_FILE 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)); */ SELECT rich_rec_virt.ID_RICHIESTA AS idRichiesta ,'SLA3' as tipoMessaggio ,rich_rec_virt.CODICE_OPERATORE_DONATING AS donorEffettivo -- rif. email Letizia 29/9/10 era xml_in.MITTENTE ,rich_rec_virt.CODICE_OPERATORE_RECIPIENT AS recipientEffettivo ,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) as dataMessaggio ,xml_in.MITTENTE AS donorRete -- rif. email Letizia 29/9/10 era 'TIMG'' ,'TIMG' AS recipientRete ,xml_in.MITTENTE as terzaParte ,'R' as processo ,0 as richiestaAdHocAom --,0 as richiestaAdHoc ,NULL 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_virt.DATA_CUT_OVER_CALC as dataCutOver ,rich_rec_virt.MSISDN as msIsdn ,ack_in.NOME_FILE as ackIniziale ,ack_out.nome_file as ackFinale ,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 , 8) ,'YYYYMMDDHH24MISS' ) as dataRicIn FROM mnp.MNP_GEST_RICH_REC_VIRT rich_rec_virt , mnp.MNP_XML_ACK_OUT ack_out , mnp.MNP_XML_IN xml_in , mnp.MNP_XML_RICHIESTA_IN rich_in, mnp.MNP_XML_ACK_IN ack_in , mnp.MNP_XML_RICHIESTA_OUT rich_out, mnp.MNP_XML_OUT xml_out WHERE rich_out.id_richiesta = rich_in.id_richiesta AND ack_in.nome_file_riferito=rich_out.nome_file and rich_out.nome_file = xml_out.nome_file and xml_out.tipo_file = 3 --porting and xml_out.destinatario <> 'NPTS' and xml_out.destinatario = xml_in.mittente 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; 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; -- RICAVA FINESTRE TEMPORALI PER TIPO FILE ? 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; cod_errore := 0; FOR rec IN record_sla LOOP n_rec := n_rec +1; -- SE IL FILE '?' 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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale); END IF; -- SE IL FILE '5' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE, IMPOSTA T_FINALE ALLA DATA DEL FILE TIPO '5' 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 := dwh.FUN_DATE_FESTIVE_SUCC(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); --qui l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); l_penale:= l_giorni_ritardo *10; l_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 ,temp_data_in ,temp_data_fin ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,l_giorni_ritardo ,l_penale ,l_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; l_penale NUMBER; l_giorni_ritardo NUMBER; l_numero_sim NUMBER; 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); temp_data_in DATE; temp_data_fin DATE; 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 --,0 as richiestaAdHoc ,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 ,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 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; 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')); -- RICAVA FINESTRE TEMPORALI PER TIPO FILE ? 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 ? 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; 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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale); END IF; -- SE IL FILE '5' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE, IMPOSTA T_FINALE ALLA DATA DEL FILE TIPO '5' 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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tFinale); 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); --qui l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); --qui l_penale:= l_giorni_ritardo *50; l_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 ,temp_data_in ,temp_data_fin ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,l_giorni_ritardo ,l_penale ,l_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; l_penale NUMBER; l_giorni_ritardo NUMBER; l_numero_sim NUMBER; 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); temp_data_in DATE; temp_data_fin DATE; 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 --,0 as richiestaAdHoc ,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 ,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 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; 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')); -- RICAVA FINESTRE TEMPORALI PER TIPO FILE ? 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; -- RICAVA FINESTRE TEMPORALI PER TIPO FILE ? 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; 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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale); END IF; -- SE IL FILE '5' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE, IMPOSTA T_FINALE ALLA DATA DEL FILE TIPO '5' 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 := dwh.FUN_DATE_FESTIVE_SUCC(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); --qui l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); --qui l_penale:= l_giorni_ritardo *50; l_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 ,temp_data_in ,temp_data_fin ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,l_giorni_ritardo ,l_penale ,l_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_in DATE; temp_data_fin DATE; ora_fin_ftemp1 CHAR(2); min_fin_ftemp1 CHAR(2); sec_fin_ftemp1 CHAR(2); dataFinale DATE; l_penale NUMBER; l_giorni_ritardo NUMBER; l_numero_sim NUMBER; ora_fin_ftemp2 CHAR(2); min_fin_ftemp2 CHAR(2); sec_fin_ftemp2 CHAR(2); CURSOR record_sla is /* SELECT rich_rec_virt.ID_RICHIESTA AS idRichiesta ,'SLA3' as tipoMessaggio ,rich_rec_virt.CODICE_OPERATORE_DONATING as donorEffettivo -- rif. email Letizia 29/9/10 era xml_in.MITTENTE ,rich_rec_virt.CODICE_OPERATORE_RECIPIENT as recipientEffettivo ,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio ,xml_in.MITTENTE AS donorRete -- rif. email Letizia 29/9/10 era 'TIMG'' ,'TIMG' AS recipientRete ,xml_in.MITTENTE as terzaParte ,'R' as processo ,0 as richiestaAdHocAom --,0 as richiestaAdHoc ,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 ,ack_out.nome_file as ackFinale , TO_CHAR( to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) ,'MM/YYYY' ) AS meseCompFinale ,NULL AS nomeFileIniziale ,xml_in.NOME_FILE 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)); */ SELECT rich_rec_virt.ID_RICHIESTA AS idRichiesta ,'SLA3' as tipoMessaggio ,rich_rec_virt.CODICE_OPERATORE_DONATING as donorEffettivo -- rif. email Letizia 29/9/10 era xml_in.MITTENTE ,rich_rec_virt.CODICE_OPERATORE_RECIPIENT as recipientEffettivo ,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio ,xml_in.MITTENTE AS donorRete -- rif. email Letizia 29/9/10 era 'TIMG'' ,'TIMG' AS recipientRete ,xml_in.MITTENTE as terzaParte ,'R' as processo ,0 as richiestaAdHocAom --,0 as richiestaAdHoc ,NULL 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_virt.DATA_CUT_OVER_CALC as dataCutOver ,rich_rec_virt.MSISDN as msIsdn ,ack_in.NOME_FILE as ackIniziale ,ack_out.nome_file as ackFinale , 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 , 8) ,'YYYYMMDDHH24MISS' ) AS dataRicIn FROM mnp.MNP_GEST_RICH_REC_VIRT rich_rec_virt , mnp.MNP_XML_ACK_OUT ack_out , mnp.MNP_XML_IN xml_in , mnp.MNP_XML_RICHIESTA_IN rich_in, mnp.MNP_XML_ACK_IN ack_in , mnp.MNP_XML_RICHIESTA_OUT rich_out, mnp.MNP_XML_OUT xml_out WHERE rich_out.id_richiesta = rich_in.id_richiesta AND ack_in.nome_file_riferito=rich_out.nome_file and rich_out.nome_file = xml_out.nome_file and xml_out.tipo_file = 3 --porting and xml_out.destinatario <> 'NPTS' and xml_out.destinatario = xml_in.mittente 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; 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 ? 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; cod_errore := 0; 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; FOR rec IN record_sla LOOP n_rec := n_rec +1; -- SE IL FILE '?' 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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale); END IF; -- SE IL FILE '5' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE, IMPOSTA T_FINALE ALLA DATA DEL FILE TIPO '5' 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 := dwh.FUN_DATE_FESTIVE_SUCC(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);--qui l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); l_penale:= l_giorni_ritardo *10; l_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 ,temp_data_in ,temp_data_fin ,rec.dataCutOver ,rec.msIsdn ,rec.ackIniziale ,rec.ackFinale ,dataFinale ,rec.meseCompFinale ,rec.nomeFileIniziale ,rec.nomeFileFinale ,l_giorni_ritardo ,l_penale ,l_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):=0; cod_errore_sla1_don NUMBER (1):=0; cod_errore_sla2_don NUMBER (1):=0; cod_errore_sla3_don NUMBER (1):=0; cod_errore_sla0_rec NUMBER (1):=0; cod_errore_sla1_rec NUMBER (1):=0; cod_errore_sla2_rec NUMBER (1):=0; cod_errore_sla3_rec NUMBER (1):=0; cod_errore_sla1_don_virt NUMBER (1):=0; cod_errore_sla2_don_virt NUMBER (1):=0; cod_errore_sla3_don_virt NUMBER (1):=0; cod_errore_sla1_rec_virt NUMBER (1):=0; cod_errore_sla2_rec_virt NUMBER (1):=0; cod_errore_sla3_rec_virt NUMBER (1):=0; cod_errore_sla1_rec_virt_M2M NUMBER (1):=0; cod_errore_sla2_rec_virt_M2M NUMBER (1):=0; cod_errore_sla3_rec_virt_M2M NUMBER (1):=0; 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; 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; /