CREATE OR REPLACE PACKAGE PKG_CALCOLO_SLA_MVNO AS /****************************************************************************** NAME: PKG_CALCOLO_SLA_MVNO PURPOSE: REVISIONS: Ver Date Author Description --------- ---------- --------------- ------------------------------------ 1.0 11/03/2010 NTT DATA 1. Created this package. 2.0 04/04/2017 NTT DATA 2. Improve CARICAMENTO_SLA3_RECIPIENT separate UPSERT for PORTING and ESPLETA 3. Improve CARICAMENTO_SLA3_RECIPIENT read oldest only into ackInizialeLetto or proc will crash on resubmitted files. 3.0 04/05/2017 NTT DATA 4. Improve CARICAMENTO_SLAX_RECIPIENT 5. Improve CARICAMENTO_SLAY_RECIPIENT 6. Improve CARICAMENTO_SLAZ_RECIPIENT prevent ACCESS FULL TABLE MNP.MNP_XML_ACK_OUT causing [ORA-01555: snapshot too old: rollback segment too small] add function-based (trunc 'MM') index on column MNP.MNP_XML_ACK_OUT.data_inserimento 4.0 05/05/2017 NTT DATA 7. Improve CALCOLO_SLA_MVNO prevent GoldenGate (to DBCBIESE) error "Discarding record on action DISCARD on error 1400 - Mapping problem with delete record (target format)" Add COMMIT after delete of earlier records from month under processing ******************************************************************************/ 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_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_SLAX_RECIPIENT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CARICAMENTO_SLAY_RECIPIENT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CARICAMENTO_SLAZ_RECIPIENT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CARICAMENTO_SLAX_REC_VIRT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CARICAMENTO_SLAZ_REC_VIRT (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CARICAMENTO_SLAX_M2M (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CARICAMENTO_SLAY_M2M (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CARICAMENTO_SLAZ_M2M (dataRif IN DATE,cod_errore OUT NUMBER); PROCEDURE CALCOLO_SLA_MVNO(dataRif IN DATE); END PKG_CALCOLO_SLA_MVNO; / CREATE OR REPLACE package body PKG_CALCOLO_SLA_MVNO as procedure CARICAMENTO_SLA0_RECIPIENT(dataRif IN DATE,cod_errore OUT NUMBER) IS ackInizialeLetto VARCHAR2(27); n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA0_RECIPIENT'; D_ini DATE; D_fine DATE; dataFinale DATE; CURSOR record_sla IS SELECT rich_out.ID_RICHIESTA AS idRichiesta ,rich_rec.CODICE_OPERATORE_DON_EFF AS donorEffettivo ,rich_rec.CODICE_OPERATORE_REC_EFF AS recipientEffettivo ,rich_rec.CODICE_OPERATORE_DONATING AS donorRete ,rich_rec.CODICE_OPERATORE_RECIPIENT AS recipientRete ,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 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.CODICE_OPERATORE_REC_EFF <> '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 D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); cod_errore := 0; FOR rec IN record_sla LOOP n_rec := n_rec +1; BEGIN -- ATTIVAZIONE INSERT INTO MNP_DW_SLA_MVNO_OUT ( UNIQUE_ID, MESE,DON_OSPITATO, REC_OSPITATO, DON_RETE, REC_RETE, MSISDN, ID_RICHIESTA, TIPO_FILE, FILE_XML, FILE_ACK, DATA_AGG) VALUES ( seq_DW_SLA_MVNO_OUT.nextval ,rec.meseCompFinale ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donorRete ,rec.recipientRete ,rec.msIsdn ,rec.idRichiesta ,'ATTIVAZ' ,rec.nomeFileIniziale ,rec.ackIniziale ,sysdate ); -- PRESA IN CARICO INSERT INTO MNP_DW_SLA_MVNO_OUT ( UNIQUE_ID,MESE,DON_OSPITATO, REC_OSPITATO, DON_RETE, REC_RETE, MSISDN, ID_RICHIESTA, TIPO_FILE, FILE_XML, FILE_ACK, DATA_AGG) VALUES ( seq_DW_SLA_MVNO_OUT.nextval ,rec.meseCompFinale ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donorRete ,rec.recipientRete ,rec.msIsdn ,rec.idRichiesta ,'PRESAIN' ,rec.nomeFileFinale ,rec.ackFinale ,sysdate ); EXCEPTION WHEN dup_val_on_index THEN BEGIN -- lettura dati preesistenti per gestione ack multipli sull'attivazione SELECT FILE_ACK INTO ackInizialeLetto FROM MNP_DW_SLA_MVNO_OUT WHERE MESE = rec.meseCompFinale AND ID_RICHIESTA = rec.idRichiesta AND TIPO_FILE = 'ATTIVAZ' AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_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_MVNO_OUT SET FILE_ACK = rec.ackIniziale WHERE ID_RICHIESTA = rec.idRichiesta AND MESE = rec.meseCompFinale AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE=rec.donorRete AND TIPO_FILE = 'ATTIVAZ'; END IF; END; END; END LOOP; COMMIT; D_finE:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: 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_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 ackFinaleLetto VARCHAR2(27); fileFinaleLetto VARCHAR2(27); 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; CURSOR record_sla is SELECT rich_in.ID_RICHIESTA AS idRichiesta ,rich_rec.CODICE_OPERATORE_DON_EFF AS donorEffettivo ,rich_rec.CODICE_OPERATORE_REC_EFF AS recipientEffettivo ,rich_rec.CODICE_OPERATORE_DONATING AS donorRete ,rich_rec.CODICE_OPERATORE_RECIPIENT AS recipientRete ,rich_rec.MSISDN AS msIsdn ,ack_out.NOME_FILE AS ackFinale ,TO_CHAR ( TO_DATE( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') AS meseCompFinale ,xml_in.NOME_FILE AS nomeFileFinale ,rich_rec.RICHIESTAADHOCAOM AS richiestaAdHocAom ,rich_rec.RICHIESTAADHOC AS richiestaAdHoc FROM 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 xml_in.NOME_FILE =RICH_in.NOME_FILE AND ack_out.NOME_FILE_RIFERITO = rich_in.NOME_FILE AND xml_in.TIPO_FILE =2 ----validazione AND rich_rec.ID_RICHIESTA = rich_in.ID_RICHIESTA AND rich_rec.CODICE_OPERATORE_REC_EFF <> '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; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); FOR rec IN record_sla LOOP flagStop:=0; n_rec := n_rec +1; --verifico se esiste una validazione antecedente. In caso affermativo neanche inserisco. 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 -- VALIDAZIONE INSERT INTO MNP_DW_SLA_MVNO_OUT ( UNIQUE_ID,MESE,DON_OSPITATO, REC_OSPITATO, DON_RETE, REC_RETE, MSISDN, ID_RICHIESTA, TIPO_FILE, FILE_XML, FILE_ACK, DATA_AGG) VALUES ( seq_DW_SLA_MVNO_OUT.nextval , rec.meseCompFinale ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donorRete ,rec.recipientRete ,rec.msIsdn ,rec.idRichiesta ,'VALIDAZ' ,rec.nomeFileFinale ,rec.ackFinale ,sysdate ); EXCEPTION WHEN dup_val_on_index THEN BEGIN -- lettura dati preesistenti SELECT FILE_ACK,FILE_XML INTO ackFinaleLetto, fileFinaleLetto FROM MNP_DW_SLA_MVNO_OUT WHERE ID_RICHIESTA = rec.idRichiesta AND TIPO_FILE = 'VALIDAZ' AND FLAG_VALIDAZIONE = '1' AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_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 UPDATE MNP_DW_SLA_MVNO_OUT SET FILE_ACK = rec.ackFinale, FILE_XML = rec.nomeFileFinale WHERE ID_RICHIESTA = rec.idRichiesta AND MESE = rec.meseCompFinale AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE=rec.donorRete AND TIPO_FILE = 'VALIDAZ' AND FLAG_VALIDAZIONE = '1'; END IF; END; END; --FINISCE QUI END IF; END LOOP; COMMIT; D_finE:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: 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_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); n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA2_RECIPIENT'; D_ini DATE; D_fine DATE; -- @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 ,rich_rec.CODICE_OPERATORE_DON_EFF AS donorEffettivo ,rich_rec.CODICE_OPERATORE_REC_EFF AS recipientEffettivo ,rich_rec.CODICE_OPERATORE_DONATING AS donorRete ,rich_rec.CODICE_OPERATORE_RECIPIENT AS recipientRete ,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 ,rich_rec.RICHIESTAADHOCAOM AS richiestaAdHocAom ,rich_rec.RICHIESTAADHOC AS richiestaAdHoc 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 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 rich_rec.CODICE_OPERATORE_REC_EFF <> 'TIMG' 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 (per selezionare la seconda) AND y.NOME_FILE = x.NOME_FILE ); BEGIN cod_errore := 0; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_ini,'YYYY-MM-DD HH24:MI:SS')); FOR rec IN record_sla LOOP n_rec := n_rec +1; BEGIN -- ESPLETAMENTO INSERT INTO MNP_DW_SLA_MVNO_OUT ( UNIQUE_ID,MESE,DON_OSPITATO, REC_OSPITATO, DON_RETE, REC_RETE, MSISDN, ID_RICHIESTA, TIPO_FILE, FILE_XML, FILE_ACK, DATA_AGG) VALUES ( seq_DW_SLA_MVNO_OUT.nextval , rec.meseCompFinale ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donorRete ,rec.recipientRete ,rec.msIsdn ,rec.idRichiesta ,'ESPLETA' ,rec.nomeFileFinale ,rec.ackFinale ,sysdate ); --VALIDAZIONE ( deve essere gestita solo la seconda validazione per i phoc)) IF (rec.richiestaadhocaom > 0 OR rec.richiestaadhoc > 0) THEN INSERT INTO MNP_DW_SLA_MVNO_OUT ( UNIQUE_ID,MESE,DON_OSPITATO, REC_OSPITATO, DON_RETE, REC_RETE, MSISDN, ID_RICHIESTA, TIPO_FILE,FLAG_VALIDAZIONE, FILE_XML, FILE_ACK, DATA_AGG) VALUES ( seq_DW_SLA_MVNO_OUT.nextval ,rec.meseCompFinale ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donorRete ,rec.recipientRete ,rec.msIsdn ,rec.idRichiesta ,'VALIDAZ' ,'2' ,rec.nomeFileIniziale ,rec.ackIniziale ,sysdate ); END IF; -- deve gestire la chiave duplicata ed aggiornare quando la data dell'ack_in minore della data dell'ack_in letto (primo ack della seconda validazione) EXCEPTION WHEN dup_val_on_index THEN begin IF (rec.richiestaadhocaom > 0 OR rec.richiestaadhoc > 0) THEN BEGIN-- lettura dati preesistenti SELECT FILE_ACK INTO ackInizialeLetto FROM MNP_DW_SLA_MVNO_OUT WHERE ID_RICHIESTA = rec.idRichiesta AND TIPO_FILE='VALIDAZ' AND FLAG_VALIDAZIONE = '2' AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_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_MVNO_OUT SET FILE_ACK = rec.ackIniziale WHERE ID_RICHIESTA = rec.idRichiesta AND MESE = rec.meseCompFinale AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE=rec.donorRete AND TIPO_FILE = 'VALIDAZ' AND FLAG_VALIDAZIONE='2'; END IF; END; END IF; END; END; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: 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_SLA2_RECIPIENT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLA2_RECIPIENT; -- v. 2.0 | 2. separate UPSERT for PORTING and ESPLETA -- v. 2.0 | 3. read oldest only into ackInizialeLetto procedure CARICAMENTO_SLA3_RECIPIENT(dataRif IN DATE,cod_errore OUT NUMBER) IS ackInizialeLetto VARCHAR2(27); n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA3_RECIPIENT'; D_ini DATE; D_fine DATE; CURSOR record_sla is SELECT rich_out.ID_RICHIESTA AS idRichiesta ,rich_rec.CODICE_OPERATORE_DON_EFF AS donorEffettivo ,rich_rec.CODICE_OPERATORE_REC_EFF AS recipientEffettivo ,xml_in.MITTENTE AS terzaParte ,rich_rec.CODICE_OPERATORE_RECIPIENT AS recipientRete ,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 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' -- filtrare espletamento da 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 rich_rec.CODICE_OPERATORE_DON_EFF <> '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; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); FOR rec IN record_sla LOOP n_rec := n_rec +1; -- RICHIESTA PORTING TP -- v. 2.0 | 2. separate UPSERT for PORTING and ESPLETA BEGIN INSERT INTO MNP_DW_SLA_MVNO_OUT ( UNIQUE_ID, MESE, DON_OSPITATO, REC_OSPITATO, DON_RETE, REC_RETE, MSISDN, ID_RICHIESTA, TIPO_FILE, FILE_XML, FILE_ACK, DATA_AGG) VALUES ( seq_DW_SLA_MVNO_OUT.nextval ,rec.meseCompFinale ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.terzaParte -- Forzo la terza parte nel Donating di Rete ,rec.recipientRete ,rec.msIsdn ,rec.idRichiesta ,'PORTING' ,rec.nomeFileIniziale ,rec.ackIniziale ,sysdate ); EXCEPTION WHEN dup_val_on_index THEN BEGIN -- lettura dati preesistenti -- v. 2.0 | 3. read oldest only into ackInizialeLetto SELECT FILE_ACK INTO ackInizialeLetto FROM ( SELECT FILE_ACK, DATA_AGG FROM MNP_DW_SLA_MVNO_OUT WHERE ID_RICHIESTA = rec.idRichiesta AND TIPO_FILE = 'PORTING' AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE = rec.terzaParte ORDER BY DATA_AGG ) WHERE ROWNUM = 1; -- se data dell'ack iniziale 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_MVNO_OUT SET FILE_ACK = rec.ackIniziale WHERE ID_RICHIESTA = rec.idRichiesta AND MESE = rec.meseCompFinale AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE = rec.terzaParte AND TIPO_FILE = 'PORTING'; END IF; END; END; -- ESPLETAMENTO TP -- v. 2.0 | 2. separate UPSERT for PORTING and ESPLETA BEGIN INSERT INTO MNP_DW_SLA_MVNO_OUT ( UNIQUE_ID,MESE, DON_OSPITATO, REC_OSPITATO, DON_RETE, REC_RETE, MSISDN, ID_RICHIESTA, TIPO_FILE, FILE_XML, FILE_ACK, DATA_AGG) VALUES ( seq_DW_SLA_MVNO_OUT.nextval ,rec.meseCompFinale ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.terzaParte ,rec.recipientRete ,rec.msIsdn ,rec.idRichiesta ,'ESPLETA' ,rec.nomeFileFinale ,rec.ackFinale ,sysdate ); EXCEPTION WHEN dup_val_on_index THEN BEGIN -- lettura dati preesistenti -- v. 2.0 | 3. read oldest only into ackInizialeLetto SELECT FILE_ACK INTO ackInizialeLetto FROM ( SELECT FILE_ACK, DATA_AGG FROM MNP_DW_SLA_MVNO_OUT WHERE ID_RICHIESTA = rec.idRichiesta AND TIPO_FILE = 'ESPLETA' AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE = rec.terzaParte ORDER BY DATA_AGG ) WHERE ROWNUM = 1; -- se data dell'ack iniziale 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_MVNO_OUT SET FILE_ACK = rec.ackIniziale WHERE ID_RICHIESTA = rec.idRichiesta AND MESE = rec.meseCompFinale AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE = rec.terzaParte AND TIPO_FILE = 'ESPLETA'; END IF; END; END; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: 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_SLA3_RECIPIENT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLA3_RECIPIENT; 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; CURSOR record_sla is SELECT rich_rec_virt.ID_RICHIESTA AS idRichiesta ,rich_rec_virt.CODICE_OPERATORE_DONATING as donorEffettivo ,rich_rec_virt.CODICE_OPERATORE_RECIPIENT as recipientEffettivo ,'TIMG' AS donorRete ,'TIMG' AS recipientRete ,rich_rec_virt.MSISDN AS msIsdn ,stor_rec_virt_ini.DATA_I_O as ackIniziale ,stor_rec_virt_fin.DATA_I_O as ackFinale ,stor_rec_virt_ini.DATA_I_O as nomeFileIniziale ,stor_rec_virt_fin.DATA_I_O as nomeFileFinale ,TO_CHAR( stor_rec_virt_fin.DATA_I_O ,'MM/YYYY' ) as meseCompFinale 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 stor_rec_virt_fin.DATA_I_O ---PRENDO TUTTE LE TRANSIZIONI DEL 1-30 DEL MESE PRECEDENTE BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)); BEGIN cod_errore := 0; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); -- RICAVA FINESTRE TEMPORALI PER TIPO FILE ? FOR rec IN record_sla LOOP n_rec := n_rec +1; --ATTIVAZIONE INSERT INTO MNP_DW_SLA_MVNO_OUT ( UNIQUE_ID,MESE,DON_OSPITATO, REC_OSPITATO, DON_RETE, REC_RETE, MSISDN, ID_RICHIESTA, TIPO_FILE, FILE_XML, FILE_ACK, DATA_AGG) VALUES ( seq_DW_SLA_MVNO_OUT.nextval ,rec.meseCompFinale ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donorRete ,rec.recipientRete ,rec.msIsdn ,rec.idRichiesta ,'ATTIVAZ' ,TO_CHAR(rec.nomeFileIniziale, 'dd/mm/yyyy') -- valorizzo con la data di transizione di stato ,TO_CHAR(rec.ackIniziale, 'dd/mm/yyyy') -- valorizzo con la data di transizione di stato ,sysdate ); --validazione INSERT INTO MNP_DW_SLA_MVNO_OUT ( UNIQUE_ID,MESE,DON_OSPITATO, REC_OSPITATO, DON_RETE, REC_RETE, MSISDN, ID_RICHIESTA, TIPO_FILE, FILE_XML, FILE_ACK, DATA_AGG) VALUES ( seq_DW_SLA_MVNO_OUT.nextval ,rec.meseCompFinale ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donorRete ,rec.recipientRete ,rec.msIsdn ,rec.idRichiesta ,'VALIDAZ' ,TO_CHAR(rec.nomeFileFinale, 'dd/mm/yyyy') -- valorizzo con la data di transizione di stato ,TO_CHAR(rec.ackFinale, 'dd/mm/yyyy') -- valorizzo con la data di transizione di stato ,sysdate ); END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: 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_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; CURSOR record_sla is SELECT rich_rec_virt.ID_RICHIESTA AS idRichiesta ,rich_rec_virt.CODICE_OPERATORE_DONATING as donorEffettivo ,rich_rec_virt.CODICE_OPERATORE_RECIPIENT as recipientEffettivo ,'TIMG' AS donorRete ,'TIMG' AS recipientRete ,rich_rec_virt.MSISDN AS msIsdn ,stor_rec_virt_ini.DATA_I_O as ackIniziale ,stor_rec_virt_fin.DATA_I_O as ackFinale ,stor_rec_virt_ini.DATA_I_O as nomeFileIniziale ,stor_rec_virt_fin.DATA_I_O as nomeFileFinale ,TO_CHAR( stor_rec_virt_fin.DATA_I_O ,'MM/YYYY' ) as meseCompFinale 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 stor_rec_virt_fin.DATA_I_O ---PRENDO TUTTE LE TRANSIZIONI DEL 1-30 DEL MESE PRECEDENTE BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)); BEGIN cod_errore := 0; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); FOR rec IN record_sla LOOP n_rec := n_rec +1; --ESPLETAMENTO INSERT INTO MNP_DW_SLA_MVNO_OUT ( UNIQUE_ID,MESE,DON_OSPITATO, REC_OSPITATO, DON_RETE, REC_RETE, MSISDN, ID_RICHIESTA, TIPO_FILE, FILE_XML, FILE_ACK, DATA_AGG) VALUES ( seq_DW_SLA_MVNO_OUT.nextval , rec.meseCompFinale ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donorRete ,rec.recipientRete ,rec.msIsdn ,rec.idRichiesta ,'ESPLETA' ,TO_CHAR(rec.nomeFileFinale, 'dd/mm/yyyy') -- valorizzo con la data di transizione di stato ,TO_CHAR(rec.ackFinale, 'dd/mm/yyyy') -- valorizzo con la data di transizione di stato ,sysdate ); END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: 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_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 n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLA3_REC_VIRT'; ackInizialeLetto VARCHAR2(27); ackFinaleLetto VARCHAR2(27); D_ini DATE; D_fine DATE; CURSOR record_sla is SELECT rich_rec_virt.ID_RICHIESTA AS idRichiesta ,rich_rec_virt.CODICE_OPERATORE_DONATING as donorEffettivo ,rich_rec_virt.CODICE_OPERATORE_RECIPIENT as recipientEffettivo ,xml_in.MITTENTE AS terzaParte ,'TIMG' AS recipientRete ,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 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 to_date( SUBSTR( ack_out.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)); BEGIN cod_errore := 0; D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); FOR rec IN record_sla LOOP n_rec := n_rec +1; BEGIN -- RICHIESTA PORTING TP INSERT INTO MNP_DW_SLA_MVNO_OUT ( UNIQUE_ID,MESE,DON_OSPITATO, REC_OSPITATO, DON_RETE, REC_RETE, MSISDN, ID_RICHIESTA, TIPO_FILE, FILE_XML, FILE_ACK, DATA_AGG) VALUES ( seq_DW_SLA_MVNO_OUT.nextval ,rec.meseCompFinale ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.terzaParte -- Forzo la terza parte nel Donating di Rete ,rec.recipientRete ,rec.msIsdn ,rec.idRichiesta ,'PORTING' ,rec.nomeFileIniziale ,rec.ackIniziale ,sysdate ); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN BEGIN -- lettura dati preesistenti per gestione ack multipli sull'attivazione SELECT FILE_ACK INTO ackInizialeLetto FROM MNP_DW_SLA_MVNO_OUT WHERE MESE = rec.meseCompFinale AND ID_RICHIESTA = rec.idRichiesta AND TIPO_FILE = 'PORTING' AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE = rec.terzaParte; -- 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_MVNO_OUT SET FILE_ACK = rec.ackIniziale WHERE ID_RICHIESTA = rec.idRichiesta AND MESE = rec.meseCompFinale AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE=rec.terzaParte AND TIPO_FILE = 'PORTING'; END IF; END; END; BEGIN -- ESPLETAMENTO TP INSERT INTO MNP_DW_SLA_MVNO_OUT ( UNIQUE_ID,MESE,DON_OSPITATO, REC_OSPITATO, DON_RETE, REC_RETE, MSISDN, ID_RICHIESTA, TIPO_FILE, FILE_XML, FILE_ACK, DATA_AGG) VALUES ( seq_DW_SLA_MVNO_OUT.nextval ,rec.meseCompFinale ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.terzaParte -- Forzo la terza parte nel Donating di Rete ,rec.recipientRete ,rec.msIsdn ,rec.idRichiesta ,'ESPLETA' ,rec.nomeFileFinale ,rec.ackFinale ,sysdate ); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN BEGIN -- lettura dati preesistenti per gestione ack multipli sull'attivazione SELECT FILE_ACK INTO ackFinaleLetto FROM MNP_DW_SLA_MVNO_OUT WHERE MESE = rec.meseCompFinale AND ID_RICHIESTA = rec.idRichiesta AND TIPO_FILE = 'ESPLETA' AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE = rec.terzaParte; -- se data dell'ack della nuova riga < data ack preesistente aggiorna i dati altrimenti scarta IF to_date( SUBSTR( rec.ackFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(ackFinaleLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ) THEN UPDATE MNP_DW_SLA_MVNO_OUT SET FILE_ACK = rec.ackFinale WHERE ID_RICHIESTA = rec.idRichiesta AND MESE = rec.meseCompFinale AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE=rec.terzaParte AND TIPO_FILE = 'ESPLETA'; END IF; END; END; END LOOP; COMMIT; D_fine:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: 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_SLA3_RECIPIENT_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLA3_REC_VIRT; -- 3.0 | 4. Improve CARICAMENTO_SLAX_RECIPIENT -- prevent ACCESS FULL TABLE MNP.MNP_XML_ACK_OUT -- causing [ORA-01555: snapshot too old: rollback segment too small] -- add function-based (trunc 'MM') index on MNP.MNP_XML_ACK_OUT.data_inserimento procedure CARICAMENTO_SLAX_RECIPIENT(dataRif IN DATE,cod_errore OUT NUMBER) IS -- Caricamento SLA Trasferimento Credito RECIPIENT n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLAX_RECIPIENT'; ackFinaleLetto VARCHAR2(27); D_ini DATE; D_fine DATE; dataFinale DATE; CURSOR record_sla is SELECT UNIQUE gr.ID_RICHIESTA AS idRichiesta ,gr.CODICE_OPERATORE_DON_EFF as donorEffettivo ,gr.CODICE_OPERATORE_REC_EFF as recipientEffettivo ,gr.CODICE_OPERATORE_DONATING AS donorRete ,gr.CODICE_OPERATORE_RECIPIENT AS recipientRete ,gr.MSISDN AS msIsdn ,MIN(espAckOut.NOME_FILE) as ackIniziale ,MIN(trasAckOut.NOME_FILE) as ackFinale ,TO_CHAR ( TO_DATE( SUBSTR( MIN(trasAckOut.NOME_FILE), 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') AS meseCompFinale ,MIN(espXml.NOME_FILE) AS nomeFileIniziale ,MIN(trasXml.NOME_FILE) AS nomeFileFinale FROM mnp.mnp_xml_ack_out@MNP trasAckOut , mnp.mnp_xml_ack_out@MNP espAckOut , mnp.mnp_xml_in@MNP trasXml , mnp.mnp_xml_in@MNP espXml , mnp.mnp_xml_richiesta_in@MNP rTrasIn , mnp.mnp_xml_richiesta_in@MNP rEspIn , mnp.mnp_gestione_richiesta_rec@MNP gr WHERE trasAckOut.risultato = 'OK' AND espXml.MITTENTE = gr.codice_operatore_donating AND trasAckOut.nome_file_riferito = trasXml.nome_file AND trasXml.nome_file = rTrasIn.nome_file AND rTrasin.id_richiesta = gr.id_richiesta AND trasXml.tipo_file = 10 AND espAckOut.nome_file_riferito = espXml.nome_file AND espXml.nome_file =rEspIn.nome_file AND rEspIn.id_richiesta = gr.id_richiesta AND espXml.tipo_file = 6 -- 3.0 | 4. Improve CARICAMENTO_SLAX_RECIPIENT -- add function-based (trunc 'MM') index on MNP.MNP_XML_ACK_OUT.data_inserimento AND TRUNC(trasAckOut.data_inserimento, 'MM') = TRUNC(ADD_MONTHS( dataRif, -1 ), 'MM') --AND trasAckOut.data_inserimento BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)) GROUP BY gr.id_richiesta , gr.codice_operatore_donating , gr.codice_operatore_recipient , gr.codice_operatore_don_eff , gr.codice_operatore_rec_eff , gr.msisdn; BEGIN D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); cod_errore := 0; FOR rec IN record_sla LOOP n_rec := n_rec +1; BEGIN -- TRASFERIMENTO CREDITO INSERT INTO MNP_DW_SLA_MVNO_OUT ( UNIQUE_ID,MESE,DON_OSPITATO, REC_OSPITATO, DON_RETE, REC_RETE, MSISDN, ID_RICHIESTA, TIPO_FILE, FILE_XML, FILE_ACK, DATA_AGG) VALUES ( seq_DW_SLA_MVNO_OUT.nextval ,rec.meseCompFinale ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donorRete ,rec.recipientRete ,rec.msIsdn ,rec.idRichiesta ,'TRASFER' ,rec.nomeFileFinale ,rec.ackFinale ,sysdate ); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN BEGIN -- lettura dati preesistenti per gestione ack multipli sull'attivazione SELECT FILE_ACK INTO ackFinaleLetto FROM MNP_DW_SLA_MVNO_OUT WHERE MESE = rec.meseCompFinale AND ID_RICHIESTA = rec.idRichiesta AND TIPO_FILE = 'TRASFER' AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE = rec.donorRete; -- se data dell'ack della nuova riga < data ack preesistente aggiorna i dati altrimenti scarta IF to_date( SUBSTR( rec.ackFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(ackFinaleLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ) THEN UPDATE MNP_DW_SLA_MVNO_OUT SET FILE_ACK = rec.ackFinale WHERE ID_RICHIESTA = rec.idRichiesta AND MESE = rec.meseCompFinale AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE=rec.donorRete AND TIPO_FILE = 'TRASFER'; END IF; END; END; END LOOP; COMMIT; D_finE:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: 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_SLAX_RECIPIENT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLAX_RECIPIENT; -- 3.0 | 5. Improve CARICAMENTO_SLAY_RECIPIENT -- prevent ACCESS FULL TABLE MNP.MNP_XML_ACK_OUT -- causing [ORA-01555: snapshot too old: rollback segment too small] -- add function-based (trunc 'MM') index on MNP.MNP_XML_ACK_OUT.data_inserimento procedure CARICAMENTO_SLAY_RECIPIENT(dataRif IN DATE,cod_errore OUT NUMBER) IS -- Caricamento SLA Sblocco credito RECIPIENT n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLAY_RECIPIENT'; ackFinaleLetto VARCHAR2(27); D_ini DATE; D_fine DATE; dataFinale DATE; CURSOR record_sla is SELECT UNIQUE gr.ID_RICHIESTA AS idRichiesta ,gr.CODICE_OPERATORE_DON_EFF as donorEffettivo ,gr.CODICE_OPERATORE_REC_EFF as recipientEffettivo ,gr.CODICE_OPERATORE_DONATING AS donorRete ,gr.CODICE_OPERATORE_RECIPIENT AS recipientRete ,gr.MSISDN AS msIsdn ,MIN(trasAckOut.nome_file) as ackIniziale ,MIN(sblCrAckOut.nome_file) as ackFinale ,TO_CHAR ( TO_DATE( SUBSTR( MIN(sblCrAckOut.NOME_FILE), 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') AS meseCompFinale ,MIN(trasXml.nome_file) AS nomeFileIniziale ,MIN(sblCrXml.nome_file) AS nomeFileFinale FROM mnp.mnp_xml_ack_out@MNP trasAckOut , mnp.mnp_xml_ack_out@MNP sblCrAckOut , mnp.mnp_xml_in@MNP trasXml , mnp.mnp_xml_in@MNP sblCrXml , mnp.mnp_xml_richiesta_in@MNP rTrasIn , mnp.mnp_xml_richiesta_in@MNP rSblCrIn , mnp.mnp_gestione_richiesta_rec@MNP gr WHERE trasAckOut.risultato = 'OK' AND trasAckOut.nome_file_riferito = trasXml.nome_file AND trasXml.nome_file = rTrasIn.nome_file AND rTrasin.id_richiesta = gr.id_richiesta AND trasXml.tipo_file = 10 AND sblCrAckOut.nome_file_riferito = sblCrXml.nome_file AND sblCrXml.nome_file =rSblCrIn.nome_file AND rSblCrIn.id_richiesta = gr.id_richiesta and sblCrXml.tipo_file = 11 -- 3.0 | 5. Improve CARICAMENTO_SLAY_RECIPIENT -- add function-based (trunc 'MM') index on MNP.MNP_XML_ACK_OUT.data_inserimento AND TRUNC(sblCrAckOut.data_inserimento, 'MM') = TRUNC(ADD_MONTHS( dataRif, -1 ), 'MM') --AND sblCrAckOut.data_inserimento BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)) GROUP BY gr.id_richiesta , gr.codice_operatore_donating , gr.codice_operatore_recipient , gr.codice_operatore_don_eff , GR.CODICE_OPERATORE_REC_EFF , gr.msisdn; BEGIN D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); cod_errore := 0; FOR rec IN record_sla LOOP BEGIN n_rec := n_rec +1; -- SBLOCCO CREDITO INSERT INTO MNP_DW_SLA_MVNO_OUT ( UNIQUE_ID,MESE,DON_OSPITATO, REC_OSPITATO, DON_RETE, REC_RETE, MSISDN, ID_RICHIESTA, TIPO_FILE, FILE_XML, FILE_ACK, DATA_AGG) VALUES ( seq_DW_SLA_MVNO_OUT.nextval ,rec.meseCompFinale ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donorRete ,rec.recipientRete ,rec.msIsdn ,rec.idRichiesta ,'SBLOCCC' ,rec.nomeFileFinale ,rec.ackFinale ,sysdate ); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN BEGIN -- lettura dati preesistenti per gestione ack multipli sull'attivazione SELECT FILE_ACK INTO ackFinaleLetto FROM MNP_DW_SLA_MVNO_OUT WHERE MESE = rec.meseCompFinale AND ID_RICHIESTA = rec.idRichiesta AND TIPO_FILE = 'SBLOCCC' AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE = rec.donorRete; -- se data dell'ack della nuova riga < data ack preesistente aggiorna i dati altrimenti scarta IF to_date( SUBSTR( rec.ackFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(ackFinaleLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ) THEN UPDATE MNP_DW_SLA_MVNO_OUT SET FILE_ACK = rec.ackFinale WHERE ID_RICHIESTA = rec.idRichiesta AND MESE = rec.meseCompFinale AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE=rec.donorRete AND TIPO_FILE = 'SBLOCCC'; END IF; END; END; END LOOP; COMMIT; D_finE:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: 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_SLAY_RECIPIENT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLAY_RECIPIENT; ---------------------------------------------------- -- 3.0 | 6. Improve CARICAMENTO_SLAZ_RECIPIENT -- prevent ACCESS FULL TABLE MNP.MNP_XML_ACK_OUT -- causing [ORA-01555: snapshot too old: rollback segment too small] -- add function-based (trunc 'MM') index on MNP.MNP_XML_ACK_OUT.data_inserimento procedure CARICAMENTO_SLAZ_RECIPIENT(dataRif IN DATE,cod_errore OUT NUMBER) IS -- Caricamento SLA Sblocco Importo RECIPIENT n_rec integer := 0; ackFinaleLetto VARCHAR2(27); proc_name constant varchar2(30) := 'CARICAMENTO_SLAZ_RECIPIENT'; D_ini DATE; D_fine DATE; dataFinale DATE; CURSOR record_sla is SELECT UNIQUE gr.ID_RICHIESTA AS idRichiesta ,gr.CODICE_OPERATORE_DON_EFF as donorEffettivo ,gr.CODICE_OPERATORE_REC_EFF as recipientEffettivo ,gr.CODICE_OPERATORE_DONATING AS donorRete ,gr.CODICE_OPERATORE_RECIPIENT AS recipientRete ,gr.MSISDN AS msIsdn ,MIN(trasAckOut.nome_file) as ackIniziale ,MIN(sblImAckOut.nome_file) as ackFinale ,TO_CHAR ( TO_DATE( SUBSTR( MIN(sblImAckOut.NOME_FILE), 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') AS meseCompFinale ,MIN(trasXml.nome_file) AS nomeFileIniziale ,MIN(sblImXml.nome_file) AS nomeFileFinale FROM mnp.mnp_xml_ack_out@MNP trasAckOut , mnp.mnp_xml_ack_out@MNP sblImAckOut , mnp.mnp_xml_in@MNP trasXml , mnp.mnp_xml_in@MNP sblImXml , mnp.mnp_xml_richiesta_in@MNP rTrasIn , mnp.mnp_xml_richiesta_in@MNP rSblImIn , mnp.mnp_gestione_richiesta_rec@MNP gr WHERE trasAckOut.risultato = 'OK' AND trasAckOut.nome_file_riferito = trasXml.nome_file AND trasXml.nome_file = rTrasIn.nome_file AND rTrasin.id_richiesta = gr.id_richiesta AND trasXml.tipo_file = 10 AND sblImAckOut.nome_file_riferito = sblImXml.nome_file AND sblImXml.nome_file =rSblImIn.nome_file AND rSblImIn.id_richiesta = gr.id_richiesta AND sblImXml.tipo_file = 12 -- 3.0 | 6. Improve CARICAMENTO_SLAZ_RECIPIENT -- add function-based (trunc 'MM') index on MNP.MNP_XML_ACK_OUT.data_inserimento AND TRUNC(sblImAckOut.data_inserimento, 'MM') = TRUNC(ADD_MONTHS( dataRif, -1 ), 'MM') --AND sblImAckOut.data_inserimento BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)) GROUP BY gr.id_richiesta , gr.codice_operatore_donating , gr.codice_operatore_recipient , gr.codice_operatore_don_eff , GR.CODICE_OPERATORE_REC_EFF , gr.msisdn; BEGIN D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); cod_errore := 0; FOR rec IN record_sla LOOP BEGIN n_rec := n_rec +1; -- SBLOCCO IMPORTO INSERT INTO MNP_DW_SLA_MVNO_OUT ( UNIQUE_ID,MESE,DON_OSPITATO, REC_OSPITATO, DON_RETE, REC_RETE, MSISDN, ID_RICHIESTA, TIPO_FILE, FILE_XML, FILE_ACK, DATA_AGG) VALUES ( seq_DW_SLA_MVNO_OUT.nextval ,rec.meseCompFinale ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donorRete ,rec.recipientRete ,rec.msIsdn ,rec.idRichiesta ,'SBLOCCI' ,rec.nomeFileFinale ,rec.ackFinale ,sysdate ); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN BEGIN -- lettura dati preesistenti per gestione ack multipli sull'attivazione SELECT FILE_ACK INTO ackFinaleLetto FROM MNP_DW_SLA_MVNO_OUT WHERE MESE = rec.meseCompFinale AND ID_RICHIESTA = rec.idRichiesta AND TIPO_FILE = 'SBLOCCI' AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE = rec.donorRete; -- se data dell'ack della nuova riga < data ack preesistente aggiorna i dati altrimenti scarta IF to_date( SUBSTR( rec.ackFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(ackFinaleLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ) THEN UPDATE MNP_DW_SLA_MVNO_OUT SET FILE_ACK = rec.ackFinale WHERE ID_RICHIESTA = rec.idRichiesta AND MESE = rec.meseCompFinale AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE=rec.donorRete AND TIPO_FILE = 'SBLOCCI'; END IF; END; END; END LOOP; COMMIT; D_finE:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: 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_SLAZ_RECIPIENT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLAZ_RECIPIENT; procedure CARICAMENTO_SLAX_REC_VIRT(dataRif IN DATE,cod_errore OUT NUMBER) IS -- Caricamento SLA Trasferimento Credito RECIPIENT VIRTUALE n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLAX_REC_VIRT'; ackFinaleLetto VARCHAR2(27); D_ini DATE; D_fine DATE; dataFinale DATE; CURSOR record_sla is SELECT UNIQUE gr.ID_RICHIESTA AS idRichiesta ,gr.CODICE_OPERATORE_DONATING as donorEffettivo ,gr.CODICE_OPERATORE_RECIPIENT as recipientEffettivo ,'TIMG' AS donorRete ,'TIMG' AS recipientRete ,gr.MSISDN AS msIsdn ,gr.data_cut_over_eff as ackIniziale ,MIN (tcin.data_ricezione) as ackFinale ,TO_CHAR(MIN(tcin.data_ricezione),'MM/YYYY') AS meseCompFinale ,gr.data_cut_over_eff AS nomeFileIniziale ,MIN (tcin.data_ricezione) AS nomeFileFinale FROM mnp.mnp_msp_tc_in@MNP tcin , mnp.mnp_gest_rich_rec_virt@MNP gr WHERE tcin.id_richiesta_dbc = gr.id_richiesta AND SUBSTR(tcin.id_richiesta_dbc,0,2)='RV' AND tcin.tipo_evento = '01' --AND gr.flag_esp = 0 AND tcin.data_ricezione BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)) GROUP BY gr.id_richiesta ,gr.data_cut_over_eff ,gr.codice_operatore_donating ,gr.codice_operatore_recipient ,gr.msisdn; BEGIN D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); cod_errore := 0; FOR rec IN record_sla LOOP BEGIN n_rec := n_rec +1; -- TRASFERIMENTO CREDITO INSERT INTO MNP_DW_SLA_MVNO_OUT ( UNIQUE_ID,MESE,DON_OSPITATO, REC_OSPITATO, DON_RETE, REC_RETE, MSISDN, ID_RICHIESTA, TIPO_FILE, FILE_XML, FILE_ACK, DATA_AGG) VALUES ( seq_DW_SLA_MVNO_OUT.nextval ,rec.meseCompFinale ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donorRete ,rec.recipientRete ,rec.msIsdn ,rec.idRichiesta ,'TRASFER' ,TO_CHAR(rec.nomeFileFinale,'dd/mm/yyyy') ,TO_CHAR(rec.ackFinale,'dd/mm/yyyy') ,sysdate ); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN BEGIN -- lettura dati preesistenti per gestione ack multipli sull'attivazione SELECT FILE_ACK INTO ackFinaleLetto FROM MNP_DW_SLA_MVNO_OUT WHERE MESE = rec.meseCompFinale AND ID_RICHIESTA = rec.idRichiesta AND TIPO_FILE = 'TRASFER' AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE = rec.donorRete; -- se data dell'ack della nuova riga < data ack preesistente aggiorna i dati altrimenti scarta IF to_date( SUBSTR( rec.ackFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(ackFinaleLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ) THEN UPDATE MNP_DW_SLA_MVNO_OUT SET FILE_ACK = rec.ackFinale WHERE ID_RICHIESTA = rec.idRichiesta AND MESE = rec.meseCompFinale AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE=rec.donorRete AND TIPO_FILE = 'TRASFER'; END IF; END; END; END LOOP; COMMIT; D_finE:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: 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_SLAX_REC_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLAX_REC_VIRT; ---------------------------------------------------------------------- procedure CARICAMENTO_SLAZ_REC_VIRT(dataRif IN DATE,cod_errore OUT NUMBER) IS -- Caricamento SLA Sblocco Importo RECIPIENT VIRTUALE n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLAZ_REC_VIRT'; ackFinaleLetto VARCHAR2(27); D_ini DATE; D_fine DATE; dataFinale DATE; CURSOR record_sla is SELECT UNIQUE gr.ID_RICHIESTA AS idRichiesta ,gr.CODICE_OPERATORE_DONATING as donorEffettivo ,gr.CODICE_OPERATORE_RECIPIENT as recipientEffettivo ,'TIMG' AS donorRete ,'TIMG' AS recipientRete ,gr.MSISDN AS msIsdn ,MIN (tcinNtCr.data_ricezione) as ackIniziale ,MIN (tcinSblIm.data_ricezione) as ackFinale ,TO_CHAR(MIN(tcinSblIm.data_ricezione),'MM/YYYY') AS meseCompFinale ,MIN (tcinNtCr.data_ricezione) AS nomeFileIniziale ,MIN (tcinSblIm.data_ricezione) AS nomeFileFinale FROM mnp.mnp_msp_tc_in@MNP tcinSblIm , mnp.mnp_msp_tc_in@MNP tcinNtCr , mnp.mnp_gest_rich_rec_virt@MNP gr WHERE tcinNtCr.id_richiesta_dbc = gr.id_richiesta AND tcinSblIm.id_richiesta_dbc = gr.id_richiesta AND SUBSTR(tcinNtCr.id_richiesta_dbc,0,2)='RV' AND tcinNtCr.tipo_evento = '01' AND SUBSTR(tcinSblIm.id_richiesta_dbc,0,2)='RV' AND tcinSblIm.tipo_evento = '03' --AND gr.flag_esp = 0 AND tcinSblIm.data_ricezione BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)) GROUP BY gr.id_richiesta ,gr.codice_operatore_donating ,gr.codice_operatore_recipient ,gr.msisdn; BEGIN D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); cod_errore := 0; FOR rec IN record_sla LOOP BEGIN n_rec := n_rec +1; -- SBLOCCO IMPORTO INSERT INTO MNP_DW_SLA_MVNO_OUT ( UNIQUE_ID,MESE,DON_OSPITATO, REC_OSPITATO, DON_RETE, REC_RETE, MSISDN, ID_RICHIESTA, TIPO_FILE, FILE_XML, FILE_ACK, DATA_AGG) VALUES ( seq_DW_SLA_MVNO_OUT.nextval ,rec.meseCompFinale ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donorRete ,rec.recipientRete ,rec.msIsdn ,rec.idRichiesta ,'SBLOCCI' ,TO_CHAR(rec.nomeFileFinale, 'dd/mm/yyyy') ,TO_CHAR(rec.ackFinale, 'dd/mm/yyyy') ,sysdate ); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN BEGIN -- lettura dati preesistenti per gestione ack multipli sull'attivazione SELECT FILE_ACK INTO ackFinaleLetto FROM MNP_DW_SLA_MVNO_OUT WHERE MESE = rec.meseCompFinale AND ID_RICHIESTA = rec.idRichiesta AND TIPO_FILE = 'SBLOCCI' AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE = rec.donorRete; -- se data dell'ack della nuova riga < data ack preesistente aggiorna i dati altrimenti scarta IF to_date( SUBSTR( rec.ackFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(ackFinaleLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ) THEN UPDATE MNP_DW_SLA_MVNO_OUT SET FILE_ACK = rec.ackFinale WHERE ID_RICHIESTA = rec.idRichiesta AND MESE = rec.meseCompFinale AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE=rec.donorRete AND TIPO_FILE = 'SBLOCCI'; END IF; END; END; END LOOP; COMMIT; D_finE:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: 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_SLAZ_REC_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLAZ_REC_VIRT; ---------------------------------------------------------------------- procedure CARICAMENTO_SLAX_M2M(dataRif IN DATE,cod_errore OUT NUMBER) IS -- Caricamento SLA Trasferimento Credito RECIPIENT M2M n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLAX_M2M'; ackFinaleLetto VARCHAR2(27); D_ini DATE; D_fine DATE; dataFinale DATE; CURSOR record_sla is SELECT UNIQUE gr.ID_RICHIESTA AS idRichiesta ,gr.CODICE_OPERATORE_DONATING as donorEffettivo ,gr.CODICE_OPERATORE_RECIPIENT as recipientEffettivo ,'TIMG' AS donorRete ,'TIMG' AS recipientRete ,gr.MSISDN AS msIsdn ,gr.data_cut_over_eff as ackIniziale ,MIN (tcin.data_ricezione) as ackFinale ,TO_CHAR(MIN(tcin.data_ricezione),'MM/YYYY') AS meseCompFinale ,gr.data_cut_over_eff AS nomeFileIniziale ,MIN (tcin.data_ricezione) AS nomeFileFinale FROM mnp.mnp_mvno_tc_in@MNP tcin , mnp.mnp_gest_rich_rec_virt@MNP gr WHERE tcin.id_richiesta_dbc = gr.id_richiesta AND SUBSTR(tcin.id_richiesta_dbc,0,2)='RV' AND tcin.tipo_evento = '01' --AND gr.flag_esp = 0 AND tcin.data_ricezione BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)) GROUP BY gr.id_richiesta ,gr.data_cut_over_eff ,gr.codice_operatore_donating ,gr.codice_operatore_recipient ,gr.msisdn; BEGIN D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); cod_errore := 0; FOR rec IN record_sla LOOP BEGIN n_rec := n_rec +1; -- TRASFERIMENTO CREDITO INSERT INTO MNP_DW_SLA_MVNO_OUT ( UNIQUE_ID,MESE,DON_OSPITATO, REC_OSPITATO, DON_RETE, REC_RETE, MSISDN, ID_RICHIESTA, TIPO_FILE, FILE_XML, FILE_ACK, DATA_AGG) VALUES ( seq_DW_SLA_MVNO_OUT.nextval ,rec.meseCompFinale ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donorRete ,rec.recipientRete ,rec.msIsdn ,rec.idRichiesta ,'TRASFER' ,TO_CHAR(rec.nomeFileFinale,'dd/mm/yyyy') ,TO_CHAR(rec.ackFinale,'dd/mm/yyyy') ,sysdate ); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN BEGIN -- lettura dati preesistenti per gestione ack multipli sull'attivazione SELECT FILE_ACK INTO ackFinaleLetto FROM MNP_DW_SLA_MVNO_OUT WHERE MESE = rec.meseCompFinale AND ID_RICHIESTA = rec.idRichiesta AND TIPO_FILE = 'TRASFER' AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE = rec.donorRete; -- se data dell'ack della nuova riga < data ack preesistente aggiorna i dati altrimenti scarta IF to_date( SUBSTR( rec.ackFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(ackFinaleLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ) THEN UPDATE MNP_DW_SLA_MVNO_OUT SET FILE_ACK = rec.ackFinale WHERE ID_RICHIESTA = rec.idRichiesta AND MESE = rec.meseCompFinale AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE=rec.donorRete AND TIPO_FILE = 'TRASFER'; END IF; END; END; END LOOP; COMMIT; D_finE:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: 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_SLAX_M2M ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLAX_M2M; --------------------------------------------- procedure CARICAMENTO_SLAZ_M2M(dataRif IN DATE,cod_errore OUT NUMBER) IS -- Caricamento SLA Sblocco Importo RECIPIENT M2M n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLAZ_M2M'; ackFinaleLetto VARCHAR2(27); D_ini DATE; D_fine DATE; dataFinale DATE; CURSOR record_sla is SELECT UNIQUE gr.ID_RICHIESTA AS idRichiesta ,gr.CODICE_OPERATORE_DONATING as donorEffettivo ,gr.CODICE_OPERATORE_RECIPIENT as recipientEffettivo ,'TIMG' AS donorRete ,'TIMG' AS recipientRete ,gr.MSISDN AS msIsdn ,MIN (tcinNtCr.data_ricezione) as ackIniziale ,MIN (tcinSblIm.data_ricezione) as ackFinale ,TO_CHAR(MIN(tcinSblIm.data_ricezione),'MM/YYYY') AS meseCompFinale ,MIN (tcinNtCr.data_ricezione) AS nomeFileIniziale ,MIN (tcinSblIm.data_ricezione) AS nomeFileFinale FROM mnp.mnp_mvno_tc_in@MNP tcinSblIm , mnp.mnp_mvno_tc_in@MNP tcinNtCr , mnp.mnp_gest_rich_rec_virt@MNP gr WHERE tcinNtCr.id_richiesta_dbc = gr.id_richiesta AND tcinSblIm.id_richiesta_dbc = gr.id_richiesta AND SUBSTR(tcinNtCr.id_richiesta_dbc,0,2)='RV' AND tcinNtCr.tipo_evento = '01' AND SUBSTR(tcinSblIm.id_richiesta_dbc,0,2)='RV' AND tcinSblIm.tipo_evento = '03' --AND gr.flag_esp = 0 AND tcinSblIm.data_ricezione BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)) GROUP BY gr.id_richiesta ,gr.codice_operatore_donating ,gr.codice_operatore_recipient ,gr.msisdn; BEGIN D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); cod_errore := 0; FOR rec IN record_sla LOOP BEGIN n_rec := n_rec +1; -- SBLOCCO IMPORTO INSERT INTO MNP_DW_SLA_MVNO_OUT ( UNIQUE_ID,MESE,DON_OSPITATO, REC_OSPITATO, DON_RETE, REC_RETE, MSISDN, ID_RICHIESTA, TIPO_FILE, FILE_XML, FILE_ACK, DATA_AGG) VALUES ( seq_DW_SLA_MVNO_OUT.nextval ,rec.meseCompFinale ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donorRete ,rec.recipientRete ,rec.msIsdn ,rec.idRichiesta ,'SBLOCCI' ,TO_CHAR(rec.nomeFileFinale, 'dd/mm/yyyy') ,TO_CHAR(rec.ackFinale, 'dd/mm/yyyy') ,sysdate ); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN BEGIN -- lettura dati preesistenti per gestione ack multipli sull'attivazione SELECT FILE_ACK INTO ackFinaleLetto FROM MNP_DW_SLA_MVNO_OUT WHERE MESE = rec.meseCompFinale AND ID_RICHIESTA = rec.idRichiesta AND TIPO_FILE = 'SBLOCCI' AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE = rec.donorRete; -- se data dell'ack della nuova riga < data ack preesistente aggiorna i dati altrimenti scarta IF to_date( SUBSTR( rec.ackFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(ackFinaleLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ) THEN UPDATE MNP_DW_SLA_MVNO_OUT SET FILE_ACK = rec.ackFinale WHERE ID_RICHIESTA = rec.idRichiesta AND MESE = rec.meseCompFinale AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE=rec.donorRete AND TIPO_FILE = 'SBLOCCI'; END IF; END; END; END LOOP; COMMIT; D_finE:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: 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_SLAZ_M2M ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLAZ_M2M; --------------------------------------------- procedure CARICAMENTO_SLAY_M2M(dataRif IN DATE,cod_errore OUT NUMBER) IS -- Caricamento SLA Sblocco Credito RECIPIENT M2M) n_rec integer := 0; proc_name constant varchar2(30) := 'CARICAMENTO_SLAY_M2M'; ackFinaleLetto VARCHAR2(27); D_ini DATE; D_fine DATE; dataFinale DATE; CURSOR record_sla is SELECT UNIQUE gr.ID_RICHIESTA AS idRichiesta ,gr.CODICE_OPERATORE_DONATING as donorEffettivo ,gr.CODICE_OPERATORE_RECIPIENT as recipientEffettivo ,'TIMG' AS donorRete ,'TIMG' AS recipientRete ,gr.MSISDN AS msIsdn ,MIN (tcinNtCr.data_ricezione) as ackIniziale ,MIN (tcinSblCr.data_ricezione) as ackFinale ,TO_CHAR(MIN(tcinSblCr.data_ricezione),'MM/YYYY') AS meseCompFinale ,MIN (tcinNtCr.data_ricezione) AS nomeFileIniziale ,MIN (tcinSblCr.data_ricezione) AS nomeFileFinale FROM mnp.mnp_mvno_tc_in@MNP tcinNtCr , mnp.mnp_mvno_tc_in@MNP tcinSblCr , mnp.mnp_gest_rich_rec_virt@MNP gr WHERE tcinNtCr.id_richiesta_dbc = gr.id_richiesta AND tcinSblCr.id_richiesta_dbc = gr.id_richiesta AND SUBSTR(tcinNtCr.id_richiesta_dbc,0,2)='RV' AND tcinNtCr.tipo_evento = '01' AND SUBSTR(tcinSblCr.id_richiesta_dbc,0,2)='RV' AND tcinSblCr.tipo_evento = '02' AND tcinSblCr.data_ricezione BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)) GROUP BY gr.id_richiesta , gr.codice_operatore_donating , gr.codice_operatore_recipient , gr.msisdn; BEGIN D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); cod_errore := 0; FOR rec IN record_sla LOOP BEGIN n_rec := n_rec +1; -- SBLOCCO CREDITO INSERT INTO MNP_DW_SLA_MVNO_OUT ( UNIQUE_ID,MESE,DON_OSPITATO, REC_OSPITATO, DON_RETE, REC_RETE, MSISDN, ID_RICHIESTA, TIPO_FILE, FILE_XML, FILE_ACK, DATA_AGG) VALUES ( seq_DW_SLA_MVNO_OUT.nextval ,rec.meseCompFinale ,rec.donorEffettivo ,rec.recipientEffettivo ,rec.donorRete ,rec.recipientRete ,rec.msIsdn ,rec.idRichiesta ,'SBLOCCC' ,TO_CHAR(rec.nomeFileFinale,'dd/mm/yyyy') ,TO_CHAR(rec.ackFinale,'dd/mm/yyyy') ,sysdate ); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN BEGIN -- lettura dati preesistenti per gestione ack multipli sull'attivazione SELECT FILE_ACK INTO ackFinaleLetto FROM MNP_DW_SLA_MVNO_OUT WHERE MESE = rec.meseCompFinale AND ID_RICHIESTA = rec.idRichiesta AND TIPO_FILE = 'SBLOCCC' AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE = rec.donorRete; -- se data dell'ack della nuova riga < data ack preesistente aggiorna i dati altrimenti scarta IF to_date( SUBSTR( rec.ackFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(ackFinaleLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ) THEN UPDATE MNP_DW_SLA_MVNO_OUT SET FILE_ACK = rec.ackFinale WHERE ID_RICHIESTA = rec.idRichiesta AND MESE = rec.meseCompFinale AND DON_OSPITATO = rec.donorEffettivo AND REC_OSPITATO = rec.recipientEffettivo AND DON_RETE=rec.donorRete AND TIPO_FILE = 'SBLOCCC'; END IF; END; END; END LOOP; COMMIT; D_finE:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: 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_SLAY_M2M ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CARICAMENTO_SLAY_M2M; ---------------------------------------------------------------------- -- 4.0 | 7. Improve CALCOLO_SLA_MVNO prevent GoldenGate (to DBCBIESE) error -- "Discarding record on action DISCARD on error 1400 - Mapping problem -- with delete record (target format)" -- Add COMMIT after delete of earlier records from month under processing procedure CALCOLO_SLA_MVNO(dataRif IN Date) IS cod_errore NUMBER (1); 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_slaX_rec NUMBER (1):=0; cod_errore_slaY_rec NUMBER (1):=0; cod_errore_slaZ_rec 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_slaX_rec_virt NUMBER (1):=0; cod_errore_slaZ_rec_virt NUMBER (1):=0; cod_errore_slaX_M2M NUMBER (1):=0; cod_errore_slaY_M2M NUMBER (1):=0; cod_errore_slaZ_M2M NUMBER (1):=0; n_rec integer := 0; proc_name constant varchar2(30) := 'CALCOLO_SLA_MVNO'; D_ini DATE; D_fine DATE; BEGIN dbms_output.enable(9999999); D_ini:=sysdate; DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_MVNO: INIZIO PROCESSO '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS')); ----------------------------------------------------- -- DELETE PREVENTIVA DELLE TABELLA PER IL REPORTING MVNO ----------------------------------------------------- DELETE MNP_DW_SLA_MVNO_OUT WHERE MESE=TO_CHAR(ADD_MONTHS(dataRif,-1),'mm/yyyy'); -- 4.0 | 7. Improve CALCOLO_SLA_MVNO prevent GoldenGate (to DBCBIESE) error -- Add COMMIT after delete of earlier records from month under processing -- ATTENTION: NO code allowed between the COMMIT above and the IF below (only comments) IF 0 < SQL%ROWCOUNT THEN COMMIT; END IF; cod_errore := 0; -- caricamento dati per il processo recipient nella tabella MNP_DW_SLA_MVNO_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_slaX_recipient(dataRif,cod_errore_slaX_rec); caricamento_slaY_recipient(dataRif,cod_errore_slaY_rec); caricamento_slaZ_recipient(dataRif,cod_errore_slaZ_rec); -- caricamento dati per il processo recipient virtuale nella tabella MNP_DW_SLA_MVNO_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_slaX_rec_virt(dataRif,cod_errore_slaX_rec_virt); caricamento_slaZ_rec_virt(dataRif,cod_errore_slaZ_rec_virt); caricamento_slaX_M2M(dataRif,cod_errore_slaX_M2M); caricamento_slaY_M2M(dataRif,cod_errore_slaY_M2M); caricamento_slaZ_M2M(dataRif,cod_errore_slaZ_M2M); cod_errore := 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_slaX_rec + cod_errore_slaY_rec + cod_errore_slaZ_rec + cod_errore_slaX_rec_virt + cod_errore_slaZ_rec_virt + cod_errore_slaX_M2M + cod_errore_slaY_M2M + cod_errore_slaZ_M2M; IF cod_errore = 0 THEN -- OK DBMS_OUTPUT.put_line ('Caricamento dati SLA avvenuto.'); ELSE -- KO 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_MVNO: 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 Sla ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END CALCOLO_SLA_MVNO; END PKG_CALCOLO_SLA_MVNO; /