Files
2024-05-13 12:54:14 +02:00

2042 lines
78 KiB
MySQL

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;
/