First Commit - Source Code from Reply

This commit is contained in:
vincenzofariello
2024-05-13 12:54:14 +02:00
parent 73e32a5020
commit a15aee1f08
11184 changed files with 1065913 additions and 0 deletions

View File

@@ -0,0 +1,11 @@
2018 C05 MNP_RU_524 evoluzione di DB_Portati
Contiene gli script per l'estrazione delle linee soggette a porting,
necessarie per lobbligo regolamentare Delibera AGCOM 147/11/CIR
che impone di fornire i dati alloperatore che ne faccia richiesta
per consentire ad un operatore entrante di allineare correttamente
la propria rete allo stato generato da tutte le portabilita'
avvenute nel tempo dall'inizio della normativa di MNP.
I principali aggiornamenti rispetto a DB_Portati sono:
- aggiunta delle tabelle di svecchiamento _HIST alla base di estrazione;
- aggiunta di indici alle tabelle di svecchiamento per velocizzare l'estrazione;

View File

@@ -0,0 +1,16 @@
#!/usr/bin/ksh
THIS_PATH=`dirname $0`
. $THIS_PATH/../setEnv.sh
$THIS_PATH/../TestNodo.sh
if [ $? -eq 0 ]
then
if [ "$1" = "" ] || [ "$2" = "" ] || [ "$3" = "" ]; then
echo "Utilizzo: ${0} data_inizio data_fine numero_righe"
echo " le date vanno passate in formato DDMMYYYY "
echo " numero_righe indica quante righe al massimo estrarre nel file"
exit -1
fi
$MNP_SCRIPT_HOME/sqlExecutor.sh -sqlplus $THIS_PATH/runDbc2ILIAD.sql $1 $2 $3 >$THIS_PATH/runDbc2ILIAD.log
fi

View File

@@ -0,0 +1,33 @@
set heading off
set pagesize 0
set linesize 200
set trimspool on
set feedback off
set verify off
set echo off
set termout off
set time off
set timing off
alter session set nls_territory='italy';
UPDATE MNP_DBP2DBCFX D
SET D.FLAG_LAVORATO=2 --in lavorazione
WHERE D.FLAG_LAVORATO=0
AND D.DATA_CUT_OVER BETWEEN TO_DATE('&1','DDMMYYYY') AND TO_DATE('&2','DDMMYYYY')
AND ROWNUM < &3;
spool mnp_dbp2ILIAD.csv
SELECT ID_RICHIESTA
||';'||MSISDN
||';'||CODICE_OPERATORE_RECIPIENT
||';'||NVL(ROUTING_NUMBER,' ')
||';'||TO_CHAR(DATA_CUT_OVER,'ddmmyyyy hh24miss')
||';'||TO_CHAR(SYSDATE,'ddmmyyyy hh24miss')
||';'
FROM MNP_DBP2DBCFX D
WHERE D.FLAG_LAVORATO=2;
spool off
UPDATE MNP_DBP2DBCFX D
SET D.FLAG_LAVORATO=1
WHERE D.FLAG_LAVORATO=2;
COMMIT;
/
EXIT

View File

@@ -0,0 +1,15 @@
#!/usr/bin/ksh
THIS_PATH=`dirname $0`
. $THIS_PATH/../setEnv.sh
$THIS_PATH/../TestNodo.sh
if [ $? -eq 0 ]
then
if [ "$1" = "" ] || [ "$2" = "" ]; then
echo "Utilizzo: ${0} data_inizio data_fine "
echo " le date vanno passate in formato DDMMYYYY "
exit -1
fi
$MNP_SCRIPT_HOME/sqlExecutor.sh -sqlplus $THIS_PATH/runRichiestaCessPort_Del147.sql $1 $2 >$THIS_PATH/runRichiestaCessPort.log
fi

View File

@@ -0,0 +1,13 @@
DECLARE
DATA_INIZIO DATE;
DATA_FINE DATE;
BEGIN
DATA_INIZIO := TO_DATE('&1','DDMMYYYY');
DATA_FINE := TO_DATE('&2','DDMMYYYY');
PKG_DBP.ESTR_RICH_CESS_PORT ( DATA_INIZIO, DATA_FINE );
COMMIT;
END;
/
exit

View File

@@ -0,0 +1,15 @@
#!/usr/bin/ksh
THIS_PATH=`dirname $0`
. $THIS_PATH/../setEnv.sh
$THIS_PATH/../TestNodo.sh
if [ $? -eq 0 ]
then
if [ "$1" = "" ] || [ "$2" = "" ]; then
echo "Utilizzo: ${0} data_inizio data_fine "
echo " le date vanno passate in formato DDMMYYYY "
exit -1
fi
$MNP_SCRIPT_HOME/sqlExecutor.sh -sqlplus $THIS_PATH/runRichiestaCess_Del147.sql $1 $2 >$THIS_PATH/runRichiestaCess.log
fi

View File

@@ -0,0 +1,13 @@
DECLARE
DATA_INIZIO DATE;
DATA_FINE DATE;
BEGIN
DATA_INIZIO := TO_DATE('&1','DDMMYYYY');
DATA_FINE := TO_DATE('&2','DDMMYYYY');
PKG_DBP.ESTR_RICHIESTA_CESS ( DATA_INIZIO, DATA_FINE );
COMMIT;
END;
/
exit

View File

@@ -0,0 +1,15 @@
#!/usr/bin/ksh
THIS_PATH=`dirname $0`
. $THIS_PATH/../setEnv.sh
$THIS_PATH/../TestNodo.sh
if [ $? -eq 0 ]
then
if [ "$1" = "" ] || [ "$2" = "" ]; then
echo "Utilizzo: ${0} data_inizio data_fine "
echo " le date vanno passate in formato DDMMYYYY "
exit -1
fi
$MNP_SCRIPT_HOME/sqlExecutor.sh -sqlplus $THIS_PATH/runRichiestaPorting_Del147.sql $1 $2 >$THIS_PATH/runRichiestaPorting.log
fi

View File

@@ -0,0 +1,19 @@
-- 2018 C05 MNP_RU_524 Del.147
-- Del.147 full export of porting history to OLOs
-- Extend PKG_DBP to include relevant _HIST tables
DECLARE
DATA_INIZIO DATE;
DATA_FINE DATE;
BEGIN
DATA_INIZIO := TO_DATE('&1','DDMMYYYY');
DATA_FINE := TO_DATE('&2','DDMMYYYY');
PKG_DBP.ESTR_RICHIESTA_PORTING_HIST ( DATA_INIZIO, DATA_FINE );
COMMIT;
PKG_DBP.ESTR_RICHIESTA_PORTING ( DATA_INIZIO, DATA_FINE );
COMMIT;
END;
/
exit

View File

@@ -0,0 +1,15 @@
#!/usr/bin/ksh
THIS_PATH=`dirname $0`
. $THIS_PATH/../setEnv.sh
$THIS_PATH/../TestNodo.sh
if [ $? -eq 0 ]
then
if [ "$1" = "" ] || [ "$2" = "" ]; then
echo "Utilizzo: ${0} data_inizio data_fine "
echo " le date vanno passate in formato DDMMYYYY "
exit -1
fi
$MNP_SCRIPT_HOME/sqlExecutor.sh -sqlplus $THIS_PATH/runRichiestaRec_Del147.sql $1 $2 >$THIS_PATH/runRichiestaRec.log
fi

View File

@@ -0,0 +1,19 @@
-- 2018 C05 MNP_RU_524 Del.147
-- Del.147 full export of porting history to OLOs
-- Extend PKG_DBP to include relevant _HIST tables
DECLARE
DATA_INIZIO DATE;
DATA_FINE DATE;
BEGIN
DATA_INIZIO := TO_DATE('&1','DDMMYYYY');
DATA_FINE := TO_DATE('&2','DDMMYYYY');
PKG_DBP.ESTR_RICHIESTA_REC_HIST ( DATA_INIZIO, DATA_FINE );
COMMIT;
PKG_DBP.ESTR_RICHIESTA_REC ( DATA_INIZIO, DATA_FINE );
COMMIT;
END;
/
exit

View File

@@ -0,0 +1,15 @@
#!/usr/bin/ksh
THIS_PATH=`dirname $0`
. $THIS_PATH/../setEnv.sh
$THIS_PATH/../TestNodo.sh
if [ $? -eq 0 ]
then
if [ "$1" = "" ] || [ "$2" = "" ]; then
echo "Utilizzo: ${0} data_inizio data_fine "
echo " le date vanno passate in formato DDMMYYYY "
exit -1
fi
$MNP_SCRIPT_HOME/sqlExecutor.sh -sqlplus $THIS_PATH/runRichiesta_Del147.sql $1 $2 >$THIS_PATH/runRichiesta.log
fi

View File

@@ -0,0 +1,19 @@
-- 2018 C05 MNP_RU_524 Del.147
-- Del.147 full export of porting history to OLOs
-- Extend PKG_DBP to include relevant _HIST tables
DECLARE
DATA_INIZIO DATE;
DATA_FINE DATE;
BEGIN
DATA_INIZIO := TO_DATE('&1','DDMMYYYY');
DATA_FINE := TO_DATE('&2','DDMMYYYY');
PKG_DBP.ESTR_RICHIESTA_HIST ( DATA_INIZIO, DATA_FINE );
COMMIT;
PKG_DBP.ESTR_RICHIESTA ( DATA_INIZIO, DATA_FINE );
COMMIT;
END;
/
exit

View File

@@ -0,0 +1,32 @@
-- Execute as user MNP
-- 2018 C05 MNP_RU_524
-- Del.147 full export of porting history to OLOs
-- DDL 1/3
-- Create indexes on relevant fields of HIST_ tables
-- for use by PKG_DBP
-- SOS
CREATE INDEX IDX_HIST_GEST_RICH_DCO
ON HIST_GESTIONE_RICHIESTA (DATA_CUT_OVER)
LOGGING TABLESPACE TAB_IDX_MEDIUM
;
CREATE INDEX IDX_HIST_GEST_RICH_STATO
ON HIST_GESTIONE_RICHIESTA (STATO)
LOGGING TABLESPACE TAB_IDX_MEDIUM
;
CREATE INDEX IDX_HIST_GEST_RICH_REC_DCO
ON HIST_GESTIONE_RICHIESTA_REC (DATA_CUT_OVER)
LOGGING TABLESPACE TAB_IDX_MEDIUM
;
CREATE INDEX IDX_HIST_GEST_RICH_PORT_DCO
ON HIST_GESTIONE_RICHIESTAPORTING (DATA_CUT_OVER)
LOGGING TABLESPACE TAB_IDX_MEDIUM
;
-- non mettere la / finale altrimenti ripete la creazione oggetti
--/
-- EOS

View File

@@ -0,0 +1,27 @@
-- Execute as user MNP
-- 2018 C05 MNP_RU_524
-- Del.147 full export of porting history to OLOs
-- Create indexes on relevant fields of LIVE tables
-- DDL 2/3
-- for use by PKG_DBP
-- SOS
CREATE INDEX IDX_MNP_GEST_RICH_DCO
ON MNP_GESTIONE_RICHIESTA (DATA_CUT_OVER)
TABLESPACE TAB_IDX_HUGE_2_1
;
CREATE INDEX IDX_MNP_GEST_RICH_STATO
ON MNP_GESTIONE_RICHIESTA (STATO)
TABLESPACE TAB_IDX_HUGE_2_1
;
CREATE INDEX IDX_MNP_GEST_RICH_REC_DCO
ON MNP_GESTIONE_RICHIESTA_REC (DATA_CUT_OVER)
TABLESPACE TAB_IDX_HUGE_2_1
;
-- non mettere la / finale altrimenti ripete la creazione oggetti
--/
-- EOS

View File

@@ -0,0 +1,542 @@
-- Execute as user MNP
-- 2018 C05 MNP_RU_524
-- Del.147 full export of porting history to OLOs
-- DDL 3/3
-- Extend PKG_DBP to include relevant _HIST tables
-- Per le CESSAZIONI riportare come CODICE_OPERATORE_RECIPIENT
-- l'OLO proprietario originale del DN (come da prefisso)
CREATE OR REPLACE PACKAGE PKG_DBP AS
PROCEDURE ESTR_RICHIESTA (in_data_inizio IN DATE, in_data_fine IN DATE);
PROCEDURE ESTR_RICHIESTA_REC (in_data_inizio IN DATE, in_data_fine IN DATE);
PROCEDURE ESTR_RICHIESTA_PORTING (in_data_inizio IN DATE, in_data_fine IN DATE);
PROCEDURE ESTR_RICH_CESS_PORT (in_data_inizio IN DATE, in_data_fine IN DATE);
PROCEDURE ESTR_RICHIESTA_CESS (in_data_inizio IN DATE, in_data_fine IN DATE);
PROCEDURE ESTR_RICHIESTA_HIST (in_data_inizio IN DATE, in_data_fine IN DATE);
PROCEDURE ESTR_RICHIESTA_REC_HIST (in_data_inizio IN DATE, in_data_fine IN DATE);
PROCEDURE ESTR_RICHIESTA_PORTING_HIST(in_data_inizio IN DATE, in_data_fine IN DATE);
END PKG_DBP;
/
CREATE OR REPLACE PACKAGE BODY PKG_DBP AS
-- ===============================================================================
-- 2018 C05 MNP_RU_524 Del.147 Procedura #1/8
-- PROCESSO DONOR STANDARD/MVNO/PrjHoc
-- Utilizza MERGE invece di LOOP on CURSOR
PROCEDURE ESTR_RICHIESTA(in_data_inizio IN DATE, in_data_fine IN DATE) IS
BEGIN
MERGE INTO MNP_DBP2DBCFX m_tgt
USING (
SELECT ID_RICHIESTA, MSISDN, CODICE_OPERATORE_RECIPIENT, ROUTING_NUMBER, DATA_CUT_OVER, DATA_ESTRAZIONE, FLAG_LAVORATO FROM (
SELECT m_cur_bulk.*, row_number() OVER (PARTITION BY MSISDN ORDER BY DATA_CUT_OVER DESC) rnum FROM (
SELECT /*+ FULL(MGR) PARALLEL(5)*/ MGR.ID_RICHIESTA AS ID_RICHIESTA
, MGR.MSISDN AS MSISDN
, MGR.CODICE_OPERATORE_RECIPIENT AS CODICE_OPERATORE_RECIPIENT
, (SELECT A.ROUTING_NUMBER FROM MNP_OLO A WHERE A.DESC_OLO=MGR.CODICE_OPERATORE_RECIPIENT) AS ROUTING_NUMBER
, MGR.DATA_CUT_OVER_CALC AS DATA_CUT_OVER
, SYSDATE AS DATA_ESTRAZIONE
, 0 AS FLAG_LAVORATO
FROM MNP_GESTIONE_RICHIESTA MGR
WHERE MGR.MSISDN IS NOT NULL
AND MGR.DATA_CUT_OVER_CALC BETWEEN in_data_inizio AND in_data_fine
AND STATO IN(
7 --VALIDATAOK
, 9 --ACCETTATA
, 14 --INCESSAZIONE
, 15 --CESSATA
, 16 --ESPLETATA
, 99 --BLOCCATA
)
) m_cur_bulk
)
WHERE rnum = 1
) m_cur
ON (m_cur.MSISDN = m_tgt.MSISDN)
WHEN MATCHED THEN
UPDATE SET
ID_RICHIESTA = m_cur.ID_RICHIESTA
, CODICE_OPERATORE_RECIPIENT = m_cur.CODICE_OPERATORE_RECIPIENT
, ROUTING_NUMBER = m_cur.ROUTING_NUMBER
, DATA_CUT_OVER = m_cur.DATA_CUT_OVER
, DATA_ESTRAZIONE = m_cur.DATA_ESTRAZIONE
, FLAG_LAVORATO = m_cur.FLAG_LAVORATO
WHERE m_cur.DATA_CUT_OVER > m_tgt.DATA_CUT_OVER
WHEN NOT MATCHED THEN
INSERT (
ID_RICHIESTA
, MSISDN
, CODICE_OPERATORE_RECIPIENT
, ROUTING_NUMBER
, DATA_CUT_OVER
, DATA_ESTRAZIONE
, FLAG_LAVORATO
) VALUES (
m_cur.ID_RICHIESTA
, m_cur.MSISDN
, m_cur.CODICE_OPERATORE_RECIPIENT
, m_cur.ROUTING_NUMBER
, m_cur.DATA_CUT_OVER
, m_cur.DATA_ESTRAZIONE
, m_cur.FLAG_LAVORATO
);
COMMIT;
RETURN;
END ESTR_RICHIESTA;
-- ===============================================================================
-- 2018 C05 MNP_RU_524 Del.147 Procedura #2/8
-- PROCESSO RECIPIENT STANDARD/MVNO/PrjHoc
-- Utilizza MERGE invece di LOOP on CURSOR
PROCEDURE ESTR_RICHIESTA_REC(in_data_inizio IN DATE, in_data_fine IN DATE) IS
BEGIN
MERGE INTO MNP_DBP2DBCFX m_tgt
USING (
SELECT ID_RICHIESTA, MSISDN, CODICE_OPERATORE_RECIPIENT, ROUTING_NUMBER, DATA_CUT_OVER, DATA_ESTRAZIONE, FLAG_LAVORATO FROM (
SELECT m_cur_bulk.*, row_number() OVER (PARTITION BY MSISDN ORDER BY DATA_CUT_OVER DESC) rnum FROM (
SELECT /*+ FULL(MGR) PARALLEL(5)*/ MGR.ID_RICHIESTA AS ID_RICHIESTA
, MGR.MSISDN AS MSISDN
, MGR.CODICE_OPERATORE_RECIPIENT AS CODICE_OPERATORE_RECIPIENT
, (SELECT A.ROUTING_NUMBER FROM MNP_OLO A WHERE A.DESC_OLO=MGR.CODICE_OPERATORE_RECIPIENT) AS ROUTING_NUMBER
, MGR.DATA_CUT_OVER_AOM AS DATA_CUT_OVER
, SYSDATE AS DATA_ESTRAZIONE
, 0 AS FLAG_LAVORATO
FROM MNP_GESTIONE_RICHIESTA_REC MGR
WHERE MGR.MSISDN IS NOT NULL
AND MGR.DATA_CUT_OVER_AOM BETWEEN in_data_inizio AND in_data_fine
AND STATO IN(
8 --VALIDATA
, 10 --ACCETTATA
, 11 --ATTESAEVASIONE
, 12 --EVASA
)
) m_cur_bulk
)
WHERE rnum = 1
) m_cur
ON (m_cur.MSISDN = m_tgt.MSISDN)
WHEN MATCHED THEN
UPDATE SET
ID_RICHIESTA = m_cur.ID_RICHIESTA
, CODICE_OPERATORE_RECIPIENT = m_cur.CODICE_OPERATORE_RECIPIENT
, ROUTING_NUMBER = m_cur.ROUTING_NUMBER
, DATA_CUT_OVER = m_cur.DATA_CUT_OVER
, DATA_ESTRAZIONE = m_cur.DATA_ESTRAZIONE
, FLAG_LAVORATO = m_cur.FLAG_LAVORATO
WHERE m_cur.DATA_CUT_OVER > m_tgt.DATA_CUT_OVER
WHEN NOT MATCHED THEN
INSERT (
ID_RICHIESTA
, MSISDN
, CODICE_OPERATORE_RECIPIENT
, ROUTING_NUMBER
, DATA_CUT_OVER
, DATA_ESTRAZIONE
, FLAG_LAVORATO
) VALUES (
m_cur.ID_RICHIESTA
, m_cur.MSISDN
, m_cur.CODICE_OPERATORE_RECIPIENT
, m_cur.ROUTING_NUMBER
, m_cur.DATA_CUT_OVER
, m_cur.DATA_ESTRAZIONE
, m_cur.FLAG_LAVORATO
);
COMMIT;
RETURN;
END ESTR_RICHIESTA_REC;
-- ===============================================================================
-- 2018 C05 MNP_RU_524 Del.147 Procedura #3/8
-- PROCESSO PORTING TERZE PARTI
-- Utilizza MERGE invece di LOOP on CURSOR
PROCEDURE ESTR_RICHIESTA_PORTING(in_data_inizio IN DATE, in_data_fine IN DATE) IS
BEGIN
MERGE INTO MNP_DBP2DBCFX m_tgt
USING (
SELECT ID_RICHIESTA, MSISDN, CODICE_OPERATORE_RECIPIENT, ROUTING_NUMBER, DATA_CUT_OVER, DATA_ESTRAZIONE, FLAG_LAVORATO FROM (
SELECT m_cur_bulk.*, row_number() OVER (PARTITION BY MSISDN ORDER BY DATA_CUT_OVER DESC) rnum FROM (
SELECT
MGR.ID_RICHIESTA AS ID_RICHIESTA
, MGR.MSISDN AS MSISDN
, MGR.CODICE_OPERATORE_RECIPIENT AS CODICE_OPERATORE_RECIPIENT
, (SELECT A.ROUTING_NUMBER FROM MNP_OLO A WHERE A.DESC_OLO=MGR.CODICE_OPERATORE_RECIPIENT) AS ROUTING_NUMBER
, MGR.DATA_CUT_OVER AS DATA_CUT_OVER
, SYSDATE AS DATA_ESTRAZIONE
, 0 AS FLAG_LAVORATO
FROM MNP_GESTIONE_RICHIESTA_PORTING MGR
WHERE MGR.MSISDN IS NOT NULL
AND MGR.DATA_CUT_OVER BETWEEN in_data_inizio AND in_data_fine
) m_cur_bulk
)
WHERE rnum = 1
) m_cur
ON (m_cur.MSISDN = m_tgt.MSISDN)
WHEN MATCHED THEN
UPDATE SET
ID_RICHIESTA = m_cur.ID_RICHIESTA
, CODICE_OPERATORE_RECIPIENT = m_cur.CODICE_OPERATORE_RECIPIENT
, ROUTING_NUMBER = m_cur.ROUTING_NUMBER
, DATA_CUT_OVER = m_cur.DATA_CUT_OVER
, DATA_ESTRAZIONE = m_cur.DATA_ESTRAZIONE
, FLAG_LAVORATO = m_cur.FLAG_LAVORATO
WHERE m_cur.DATA_CUT_OVER > m_tgt.DATA_CUT_OVER
WHEN NOT MATCHED THEN
INSERT (
ID_RICHIESTA
, MSISDN
, CODICE_OPERATORE_RECIPIENT
, ROUTING_NUMBER
, DATA_CUT_OVER
, DATA_ESTRAZIONE
, FLAG_LAVORATO
) VALUES (
m_cur.ID_RICHIESTA
, m_cur.MSISDN
, m_cur.CODICE_OPERATORE_RECIPIENT
, m_cur.ROUTING_NUMBER
, m_cur.DATA_CUT_OVER
, m_cur.DATA_ESTRAZIONE
, m_cur.FLAG_LAVORATO
);
COMMIT;
RETURN;
END ESTR_RICHIESTA_PORTING;
-- ===============================================================================
-- 2018 C05 MNP_RU_524 Del.147 Procedura #4/8
-- PROCESSO CESSAZIONI PORTING
-- STATO 4 = CESSATA
-- STATO 2 = DA_INVIARE dove l'invio viene fatto solo per numeri NON-TIM
-- Riportare come CODICE_OPERATORE_RECIPIENT l'OLO proprietario originale del DN
-- L'ultima condizione serve a estrarre OLO Cessatori (Donor) esistenti e validi
-- La condizione originale sullo STATO 2 era la seguente (corretta ma INVOLUTA)
-- MGR.STATO='2' AND NOT EXISTS (
-- SELECT MO.COD_OLO FROM MNP_OLO MO, MNP_OLO_PREFISSI MOP WHERE MO.DESC_OLO IN('TIMT','TIMG')
-- AND MOP.COD_OLO=MO.COD_OLO AND ( MOP.PREFIX=SUBSTR(MGR.MSISDN,3,3) OR MOP.PREFIX=SUBSTR(MGR.MSISDN,3,4) )
-- )
-- e' stata reingegnerizzata con la seguente logica
-- MGR.STATO='2' AND "il proprietario originale della numerazione NON era TIM"
-- Utilizza MERGE invece di LOOP on CURSOR
PROCEDURE ESTR_RICH_CESS_PORT(in_data_inizio IN DATE, in_data_fine IN DATE) IS
BEGIN
MERGE INTO MNP_DBP2DBCFX m_tgt
USING (
SELECT ID_RICHIESTA, MSISDN, CODICE_OPERATORE_RECIPIENT, ROUTING_NUMBER, DATA_CUT_OVER, DATA_ESTRAZIONE, FLAG_LAVORATO FROM (
SELECT m_cur_bulk.*, row_number() OVER (PARTITION BY MSISDN ORDER BY DATA_CUT_OVER DESC) rnum FROM (
SELECT
MGR.ID_RICHIESTA AS ID_RICHIESTA
, MGR.MSISDN AS MSISDN
, O.DESC_OLO AS CODICE_OPERATORE_CESSATORE
, O.ROUTING_NUMBER AS ROUTING_NUMBER_CESSATORE
, MGR.DATARICEZIONERICHIESTA AS DATA_CUT_OVER
, SYSDATE AS DATA_ESTRAZIONE
, 0 AS FLAG_LAVORATO
, MO.DESC_OLO AS CODICE_OPERATORE_RECIPIENT
, MO.ROUTING_NUMBER AS ROUTING_NUMBER
FROM MNP_GESTIONE_RICH_CESS_PORT MGR, MNP_OLO O
, MNP_OLO_PREFISSI MOP INNER JOIN MNP_OLO MO ON MO.COD_OLO=MOP.COD_OLO
WHERE
MGR.MSISDN IS NOT NULL
AND MGR.DATARICEZIONERICHIESTA BETWEEN in_data_inizio AND in_data_fine
AND ( MOP.PREFIX=SUBSTR(MGR.MSISDN,3,3) OR MOP.PREFIX=SUBSTR(MGR.MSISDN,3,4) )
AND ( MGR.STATO='4' OR ( MGR.STATO='2' AND MO.DESC_OLO NOT IN('TIMT','TIMG') ) )
AND O.DESC_OLO=MGR.CODICE_OPERATORE_RECIPIENT
) m_cur_bulk
)
WHERE rnum = 1
) m_cur
ON (m_cur.MSISDN = m_tgt.MSISDN)
WHEN MATCHED THEN
UPDATE SET
ID_RICHIESTA = m_cur.ID_RICHIESTA
, CODICE_OPERATORE_RECIPIENT = m_cur.CODICE_OPERATORE_RECIPIENT
, ROUTING_NUMBER = m_cur.ROUTING_NUMBER
, DATA_CUT_OVER = m_cur.DATA_CUT_OVER
, DATA_ESTRAZIONE = m_cur.DATA_ESTRAZIONE
, FLAG_LAVORATO = m_cur.FLAG_LAVORATO
WHERE m_cur.DATA_CUT_OVER > m_tgt.DATA_CUT_OVER
WHEN NOT MATCHED THEN
INSERT (
ID_RICHIESTA
, MSISDN
, CODICE_OPERATORE_RECIPIENT
, ROUTING_NUMBER
, DATA_CUT_OVER
, DATA_ESTRAZIONE
, FLAG_LAVORATO
) VALUES (
m_cur.ID_RICHIESTA
, m_cur.MSISDN
, m_cur.CODICE_OPERATORE_RECIPIENT
, m_cur.ROUTING_NUMBER
, m_cur.DATA_CUT_OVER
, m_cur.DATA_ESTRAZIONE
, m_cur.FLAG_LAVORATO
);
COMMIT;
RETURN;
END ESTR_RICH_CESS_PORT;
-- ===============================================================================
-- 2018 C05 MNP_RU_524 Del.147 Procedura #5/8
-- PROCESSO CESSAZIONI
-- Riportare come CODICE_OPERATORE_RECIPIENT l'OLO proprietario originale del DN
-- L'ultima condizione serve a estrarre OLO Cessatori (Donor) esistenti e validi
-- Utilizza MERGE invece di LOOP on CURSOR
PROCEDURE ESTR_RICHIESTA_CESS(in_data_inizio IN DATE, in_data_fine IN DATE) IS
BEGIN
MERGE INTO MNP_DBP2DBCFX m_tgt
USING (
SELECT ID_RICHIESTA, MSISDN, CODICE_OPERATORE_RECIPIENT, ROUTING_NUMBER, DATA_CUT_OVER, DATA_ESTRAZIONE, FLAG_LAVORATO FROM (
SELECT m_cur_bulk.*, row_number() OVER (PARTITION BY MSISDN ORDER BY DATA_CUT_OVER DESC) rnum FROM (
SELECT
MGR.ID_RICHIESTA AS ID_RICHIESTA
, MGR.MSISDN AS MSISDN
, O.DESC_OLO AS CODICE_OPERATORE_CESSATORE
, O.ROUTING_NUMBER AS ROUTING_NUMBER_CESSATORE
, MGR.DATARICEZIONERICHIESTA AS DATA_CUT_OVER
, SYSDATE AS DATA_ESTRAZIONE
, 0 AS FLAG_LAVORATO
, MO.DESC_OLO AS CODICE_OPERATORE_RECIPIENT
, MO.ROUTING_NUMBER AS ROUTING_NUMBER
FROM
MNP_GESTIONE_RICHIESTA_CESS MGR, MNP_OLO O
, MNP_OLO_PREFISSI MOP INNER JOIN MNP_OLO MO ON MO.COD_OLO=MOP.COD_OLO
WHERE
MGR.MSISDN IS NOT NULL
AND MGR.DATARICEZIONERICHIESTA BETWEEN in_data_inizio AND in_data_fine
AND (MOP.PREFIX = SUBSTR(MGR.MSISDN,3,3) OR MOP.PREFIX = SUBSTR(MGR.MSISDN,3,4))
AND O.DESC_OLO = MGR.CODICE_OPERATORE_RECIPIENT
) m_cur_bulk
)
WHERE rnum = 1
) m_cur
ON (m_cur.MSISDN = m_tgt.MSISDN)
WHEN MATCHED THEN
UPDATE SET
ID_RICHIESTA = m_cur.ID_RICHIESTA
, CODICE_OPERATORE_RECIPIENT = m_cur.CODICE_OPERATORE_RECIPIENT
, ROUTING_NUMBER = m_cur.ROUTING_NUMBER
, DATA_CUT_OVER = m_cur.DATA_CUT_OVER
, DATA_ESTRAZIONE = m_cur.DATA_ESTRAZIONE
, FLAG_LAVORATO = m_cur.FLAG_LAVORATO
WHERE m_cur.DATA_CUT_OVER > m_tgt.DATA_CUT_OVER
WHEN NOT MATCHED THEN
INSERT (
ID_RICHIESTA
, MSISDN
, CODICE_OPERATORE_RECIPIENT
, ROUTING_NUMBER
, DATA_CUT_OVER
, DATA_ESTRAZIONE
, FLAG_LAVORATO
) VALUES (
m_cur.ID_RICHIESTA
, m_cur.MSISDN
, m_cur.CODICE_OPERATORE_RECIPIENT
, m_cur.ROUTING_NUMBER
, m_cur.DATA_CUT_OVER
, m_cur.DATA_ESTRAZIONE
, m_cur.FLAG_LAVORATO
);
COMMIT;
RETURN;
END ESTR_RICHIESTA_CESS;
-- ===============================================================================
-- 2018 C05 MNP_RU_524 Del.147 Procedura #6/8
-- PROCESSO DONOR STANDARD/MVNO/PrjHoc tabella storicizzata
-- Utilizza MERGE invece di LOOP on CURSOR
PROCEDURE ESTR_RICHIESTA_HIST(in_data_inizio IN DATE, in_data_fine IN DATE) IS
BEGIN
MERGE INTO MNP_DBP2DBCFX m_tgt
USING (
SELECT ID_RICHIESTA, MSISDN, CODICE_OPERATORE_RECIPIENT, ROUTING_NUMBER, DATA_CUT_OVER, DATA_ESTRAZIONE, FLAG_LAVORATO FROM (
SELECT m_cur_bulk.*, row_number() OVER (PARTITION BY MSISDN ORDER BY DATA_CUT_OVER DESC) rnum FROM (
SELECT
MGR.ID_RICHIESTA AS ID_RICHIESTA
, MGR.MSISDN AS MSISDN
, MGR.CODICE_OPERATORE_RECIPIENT AS CODICE_OPERATORE_RECIPIENT
, (SELECT A.ROUTING_NUMBER FROM MNP_OLO A WHERE A.DESC_OLO = MGR.CODICE_OPERATORE_RECIPIENT) AS ROUTING_NUMBER
, MGR.DATA_CUT_OVER_CALC AS DATA_CUT_OVER
, SYSDATE AS DATA_ESTRAZIONE
, 0 AS FLAG_LAVORATO
FROM HIST_GESTIONE_RICHIESTA MGR
WHERE MGR.MSISDN IS NOT NULL
AND MGR.DATA_CUT_OVER_CALC BETWEEN in_data_inizio AND in_data_fine
AND MGR.STATO IN(
7 --VALIDATAOK
, 9 --ACCETTATA
, 14 --INCESSAZIONE
, 15 --CESSATA
, 16 --ESPLETATA
, 99 --BLOCCATA
)
) m_cur_bulk
)
WHERE rnum = 1
) m_cur
ON (m_cur.MSISDN = m_tgt.MSISDN)
WHEN MATCHED THEN
UPDATE SET
ID_RICHIESTA = m_cur.ID_RICHIESTA
, CODICE_OPERATORE_RECIPIENT = m_cur.CODICE_OPERATORE_RECIPIENT
, ROUTING_NUMBER = m_cur.ROUTING_NUMBER
, DATA_CUT_OVER = m_cur.DATA_CUT_OVER
, DATA_ESTRAZIONE = m_cur.DATA_ESTRAZIONE
, FLAG_LAVORATO = m_cur.FLAG_LAVORATO
WHERE m_cur.DATA_CUT_OVER > m_tgt.DATA_CUT_OVER
WHEN NOT MATCHED THEN
INSERT (
ID_RICHIESTA
, MSISDN
, CODICE_OPERATORE_RECIPIENT
, ROUTING_NUMBER
, DATA_CUT_OVER
, DATA_ESTRAZIONE
, FLAG_LAVORATO
) VALUES (
m_cur.ID_RICHIESTA
, m_cur.MSISDN
, m_cur.CODICE_OPERATORE_RECIPIENT
, m_cur.ROUTING_NUMBER
, m_cur.DATA_CUT_OVER
, m_cur.DATA_ESTRAZIONE
, m_cur.FLAG_LAVORATO
);
COMMIT;
RETURN;
END ESTR_RICHIESTA_HIST;
-- ===============================================================================
-- 2018 C05 MNP_RU_524 Del.147 Procedura #7/8
-- PROCESSO RECIPIENT STANDARD/MVNO/PRJHOC tabella storicizzata
-- Utilizza MERGE invece di LOOP on CURSOR
PROCEDURE ESTR_RICHIESTA_REC_HIST(in_data_inizio IN DATE, in_data_fine IN DATE) IS
BEGIN
MERGE INTO MNP_DBP2DBCFX m_tgt
USING (
SELECT ID_RICHIESTA, MSISDN, CODICE_OPERATORE_RECIPIENT, ROUTING_NUMBER, DATA_CUT_OVER, DATA_ESTRAZIONE, FLAG_LAVORATO FROM (
SELECT m_cur_bulk.*, row_number() OVER (PARTITION BY MSISDN ORDER BY DATA_CUT_OVER DESC) rnum FROM (
SELECT
MGR.ID_RICHIESTA AS ID_RICHIESTA
, MGR.MSISDN AS MSISDN
, MGR.CODICE_OPERATORE_RECIPIENT AS CODICE_OPERATORE_RECIPIENT
, (SELECT A.ROUTING_NUMBER FROM MNP_OLO A WHERE A.DESC_OLO = MGR.CODICE_OPERATORE_RECIPIENT) AS ROUTING_NUMBER
, MGR.DATA_CUT_OVER_AOM AS DATA_CUT_OVER
, SYSDATE AS DATA_ESTRAZIONE
, 0 AS FLAG_LAVORATO
FROM HIST_GESTIONE_RICHIESTA_REC MGR
WHERE MGR.MSISDN IS NOT NULL
AND MGR.DATA_CUT_OVER_AOM BETWEEN in_data_inizio AND in_data_fine
AND MGR.STATO IN(
8 --VALIDATA
, 10 --ACCETTATA
, 11 --ATTESAEVASIONE
, 12 --EVASA
)
) m_cur_bulk
)
WHERE rnum = 1
) m_cur
ON (m_cur.MSISDN = m_tgt.MSISDN)
WHEN MATCHED THEN
UPDATE SET
ID_RICHIESTA = m_cur.ID_RICHIESTA
, CODICE_OPERATORE_RECIPIENT = m_cur.CODICE_OPERATORE_RECIPIENT
, ROUTING_NUMBER = m_cur.ROUTING_NUMBER
, DATA_CUT_OVER = m_cur.DATA_CUT_OVER
, DATA_ESTRAZIONE = m_cur.DATA_ESTRAZIONE
, FLAG_LAVORATO = m_cur.FLAG_LAVORATO
WHERE m_cur.DATA_CUT_OVER > m_tgt.DATA_CUT_OVER
WHEN NOT MATCHED THEN
INSERT (
ID_RICHIESTA
, MSISDN
, CODICE_OPERATORE_RECIPIENT
, ROUTING_NUMBER
, DATA_CUT_OVER
, DATA_ESTRAZIONE
, FLAG_LAVORATO
) VALUES (
m_cur.ID_RICHIESTA
, m_cur.MSISDN
, m_cur.CODICE_OPERATORE_RECIPIENT
, m_cur.ROUTING_NUMBER
, m_cur.DATA_CUT_OVER
, m_cur.DATA_ESTRAZIONE
, m_cur.FLAG_LAVORATO
);
COMMIT;
RETURN;
END ESTR_RICHIESTA_REC_HIST;
-- ===============================================================================
-- 2018 C05 MNP_RU_524 Del.147 Procedura #8/8
-- PROCESSO PORTING TERZE PARTI tabella storicizzata
-- Utilizza MERGE invece di LOOP on CURSOR
PROCEDURE ESTR_RICHIESTA_PORTING_HIST(in_data_inizio IN DATE, in_data_fine IN DATE) IS
BEGIN
MERGE INTO MNP_DBP2DBCFX m_tgt
USING (
SELECT ID_RICHIESTA, MSISDN, CODICE_OPERATORE_RECIPIENT, ROUTING_NUMBER, DATA_CUT_OVER, DATA_ESTRAZIONE, FLAG_LAVORATO FROM (
SELECT m_cur_bulk.*, row_number() OVER (PARTITION BY MSISDN ORDER BY DATA_CUT_OVER DESC) rnum FROM (
SELECT
MGR.ID_RICHIESTA AS ID_RICHIESTA
, MGR.MSISDN AS MSISDN
, MGR.CODICE_OPERATORE_RECIPIENT AS CODICE_OPERATORE_RECIPIENT
, (SELECT A.ROUTING_NUMBER FROM MNP_OLO A WHERE A.DESC_OLO = MGR.CODICE_OPERATORE_RECIPIENT) AS ROUTING_NUMBER
, MGR.DATA_CUT_OVER AS DATA_CUT_OVER
, SYSDATE AS DATA_ESTRAZIONE
, 0 AS FLAG_LAVORATO
FROM HIST_GESTIONE_RICHIESTAPORTING MGR
WHERE MGR.MSISDN IS NOT NULL
AND MGR.DATA_CUT_OVER BETWEEN in_data_inizio AND in_data_fine
) m_cur_bulk
)
WHERE rnum = 1
) m_cur
ON (m_cur.MSISDN = m_tgt.MSISDN)
WHEN MATCHED THEN
UPDATE SET
ID_RICHIESTA = m_cur.ID_RICHIESTA
, CODICE_OPERATORE_RECIPIENT = m_cur.CODICE_OPERATORE_RECIPIENT
, ROUTING_NUMBER = m_cur.ROUTING_NUMBER
, DATA_CUT_OVER = m_cur.DATA_CUT_OVER
, DATA_ESTRAZIONE = m_cur.DATA_ESTRAZIONE
, FLAG_LAVORATO = m_cur.FLAG_LAVORATO
WHERE m_cur.DATA_CUT_OVER > m_tgt.DATA_CUT_OVER
WHEN NOT MATCHED THEN
INSERT (
ID_RICHIESTA
, MSISDN
, CODICE_OPERATORE_RECIPIENT
, ROUTING_NUMBER
, DATA_CUT_OVER
, DATA_ESTRAZIONE
, FLAG_LAVORATO
) VALUES (
m_cur.ID_RICHIESTA
, m_cur.MSISDN
, m_cur.CODICE_OPERATORE_RECIPIENT
, m_cur.ROUTING_NUMBER
, m_cur.DATA_CUT_OVER
, m_cur.DATA_ESTRAZIONE
, m_cur.FLAG_LAVORATO
);
COMMIT;
RETURN;
END ESTR_RICHIESTA_PORTING_HIST;
END PKG_DBP;
/

View File

@@ -0,0 +1,179 @@
-- Execute as user MNP
-- 2018 C05 MNP_RU_524
-- Del.147 full export of porting history to OLOs
-- Full extract for DNs in test set, with name of table of origin.
SELECT * FROM (
SELECT ID_RICHIESTA, MSISDN, CODICE_OPERATORE_RECIPIENT, ROUTING_NUMBER, DATA_CUT_OVER, DATA_ESTRAZIONE, TABELLA_ORIGINE FROM (
SELECT m_cur_bulk.*, row_number() OVER (PARTITION BY MSISDN ORDER BY DATA_CUT_OVER DESC) rnum FROM (
SELECT /*+ FULL(MGR) PARALLEL(5)*/ MGR.ID_RICHIESTA AS ID_RICHIESTA
, MGR.MSISDN AS MSISDN
, MGR.CODICE_OPERATORE_RECIPIENT AS CODICE_OPERATORE_RECIPIENT
, (SELECT A.ROUTING_NUMBER FROM MNP_OLO A WHERE A.DESC_OLO=MGR.CODICE_OPERATORE_RECIPIENT) AS ROUTING_NUMBER
, MGR.DATA_CUT_OVER AS DATA_CUT_OVER
, SYSDATE AS DATA_ESTRAZIONE
, 'MNP_GESTIONE_RICHIESTA' AS TABELLA_ORIGINE
FROM MNP_GESTIONE_RICHIESTA MGR
WHERE MGR.MSISDN IN ( '393276330000' , '393288825691' , '393291154276' , '393318806310' , '393333559969' , '393334100351' , '393336146249' , '393342619998' , '393346320565'
, '393346485003' , '393347137411' , '393357493056' , '393358320077' , '393381525418' , '393386128129' , '393394440718' , '393397925615' , '393402650849' , '393403250339'
, '393404090400' , '393421293174' , '393423838570' , '393457350261' , '393460926424' , '393461435422' , '393480672962' , '393481198300' , '393483855131' , '393485142050'
, '393487515463' , '393488959368' , '393490583568' , '393492449836' , '393495296549' , '393497083239' , '393737571533' , '393927061964' , '393928457910' , '393929504561'
)
AND STATO IN ( 7, 9, 14, 15, 16, 99 )
) m_cur_bulk
)
WHERE rnum = 1
UNION ALL
SELECT ID_RICHIESTA, MSISDN, CODICE_OPERATORE_RECIPIENT, ROUTING_NUMBER, DATA_CUT_OVER, DATA_ESTRAZIONE, TABELLA_ORIGINE FROM (
SELECT m_cur_bulk.*, row_number() OVER (PARTITION BY MSISDN ORDER BY DATA_CUT_OVER DESC) rnum FROM (
SELECT /*+ FULL(MGR) PARALLEL(5)*/ MGR.ID_RICHIESTA AS ID_RICHIESTA
, MGR.MSISDN AS MSISDN
, MGR.CODICE_OPERATORE_RECIPIENT AS CODICE_OPERATORE_RECIPIENT
, (SELECT A.ROUTING_NUMBER FROM MNP_OLO A WHERE A.DESC_OLO=MGR.CODICE_OPERATORE_RECIPIENT) AS ROUTING_NUMBER
, MGR.DATA_CUT_OVER AS DATA_CUT_OVER
, SYSDATE AS DATA_ESTRAZIONE
, 'MNP_GESTIONE_RICHIESTA_REC' AS TABELLA_ORIGINE
FROM MNP_GESTIONE_RICHIESTA_REC MGR
WHERE MGR.MSISDN IN ( '393276330000' , '393288825691' , '393291154276' , '393318806310' , '393333559969' , '393334100351' , '393336146249' , '393342619998' , '393346320565'
, '393346485003' , '393347137411' , '393357493056' , '393358320077' , '393381525418' , '393386128129' , '393394440718' , '393397925615' , '393402650849' , '393403250339'
, '393404090400' , '393421293174' , '393423838570' , '393457350261' , '393460926424' , '393461435422' , '393480672962' , '393481198300' , '393483855131' , '393485142050'
, '393487515463' , '393488959368' , '393490583568' , '393492449836' , '393495296549' , '393497083239' , '393737571533' , '393927061964' , '393928457910' , '393929504561'
)
AND STATO IN ( 8, 10, 11, 12 )
) m_cur_bulk
)
WHERE rnum = 1
UNION ALL
SELECT ID_RICHIESTA, MSISDN, CODICE_OPERATORE_RECIPIENT, ROUTING_NUMBER, DATA_CUT_OVER, DATA_ESTRAZIONE, TABELLA_ORIGINE FROM (
SELECT m_cur_bulk.*, row_number() OVER (PARTITION BY MSISDN ORDER BY DATA_CUT_OVER DESC) rnum FROM (
SELECT
MGR.ID_RICHIESTA AS ID_RICHIESTA
, MGR.MSISDN AS MSISDN
, MGR.CODICE_OPERATORE_RECIPIENT AS CODICE_OPERATORE_RECIPIENT
, (SELECT A.ROUTING_NUMBER FROM MNP_OLO A WHERE A.DESC_OLO=MGR.CODICE_OPERATORE_RECIPIENT) AS ROUTING_NUMBER
, MGR.DATA_CUT_OVER AS DATA_CUT_OVER
, SYSDATE AS DATA_ESTRAZIONE
, 'MNP_GESTIONE_RICHIESTA_PORTING' AS TABELLA_ORIGINE
FROM MNP_GESTIONE_RICHIESTA_PORTING MGR
WHERE MGR.MSISDN IN ( '393276330000' , '393288825691' , '393291154276' , '393318806310' , '393333559969' , '393334100351' , '393336146249' , '393342619998' , '393346320565'
, '393346485003' , '393347137411' , '393357493056' , '393358320077' , '393381525418' , '393386128129' , '393394440718' , '393397925615' , '393402650849' , '393403250339'
, '393404090400' , '393421293174' , '393423838570' , '393457350261' , '393460926424' , '393461435422' , '393480672962' , '393481198300' , '393483855131' , '393485142050'
, '393487515463' , '393488959368' , '393490583568' , '393492449836' , '393495296549' , '393497083239' , '393737571533' , '393927061964' , '393928457910' , '393929504561'
)
) m_cur_bulk
)
WHERE rnum = 1
UNION ALL
SELECT ID_RICHIESTA, MSISDN, CODICE_OPERATORE_RECIPIENT, ROUTING_NUMBER, DATA_CUT_OVER, DATA_ESTRAZIONE, TABELLA_ORIGINE FROM (
SELECT m_cur_bulk.*, row_number() OVER (PARTITION BY MSISDN ORDER BY DATA_CUT_OVER DESC) rnum FROM (
SELECT
MGR.ID_RICHIESTA AS ID_RICHIESTA
, MGR.MSISDN AS MSISDN
, O.DESC_OLO AS CODICE_OPERATORE_CESSATORE
, O.ROUTING_NUMBER AS ROUTING_NUMBER_CESSATORE
, MGR.DATA_CUT_OVER AS DATA_CUT_OVER
, SYSDATE AS DATA_ESTRAZIONE
, 'MNP_GESTIONE_RICH_CESS_PORT' AS TABELLA_ORIGINE
, MO.DESC_OLO AS CODICE_OPERATORE_RECIPIENT
, MO.ROUTING_NUMBER AS ROUTING_NUMBER
FROM MNP_GESTIONE_RICH_CESS_PORT MGR, MNP_OLO O
, MNP_OLO_PREFISSI MOP INNER JOIN MNP_OLO MO ON MO.COD_OLO=MOP.COD_OLO
WHERE MGR.MSISDN IN ( '393276330000' , '393288825691' , '393291154276' , '393318806310' , '393333559969' , '393334100351' , '393336146249' , '393342619998' , '393346320565'
, '393346485003' , '393347137411' , '393357493056' , '393358320077' , '393381525418' , '393386128129' , '393394440718' , '393397925615' , '393402650849' , '393403250339'
, '393404090400' , '393421293174' , '393423838570' , '393457350261' , '393460926424' , '393461435422' , '393480672962' , '393481198300' , '393483855131' , '393485142050'
, '393487515463' , '393488959368' , '393490583568' , '393492449836' , '393495296549' , '393497083239' , '393737571533' , '393927061964' , '393928457910' , '393929504561'
)
AND ( MOP.PREFIX=SUBSTR(MGR.MSISDN,3,3) OR MOP.PREFIX=SUBSTR(MGR.MSISDN,3,4) )
AND ( MGR.STATO='4' OR ( MGR.STATO='2' AND MO.DESC_OLO NOT IN('TIMT','TIMG') ) )
AND O.DESC_OLO=MGR.CODICE_OPERATORE_RECIPIENT
) m_cur_bulk
)
WHERE rnum = 1
UNION ALL
SELECT ID_RICHIESTA, MSISDN, CODICE_OPERATORE_RECIPIENT, ROUTING_NUMBER, DATA_CUT_OVER, DATA_ESTRAZIONE, TABELLA_ORIGINE FROM (
SELECT m_cur_bulk.*, row_number() OVER (PARTITION BY MSISDN ORDER BY DATA_CUT_OVER DESC) rnum FROM (
SELECT
MGR.ID_RICHIESTA AS ID_RICHIESTA
, MGR.MSISDN AS MSISDN
, O.DESC_OLO AS CODICE_OPERATORE_CESSATORE
, O.ROUTING_NUMBER AS ROUTING_NUMBER_CESSATORE
, MGR.DATA_CUT_OVER AS DATA_CUT_OVER
, SYSDATE AS DATA_ESTRAZIONE
, 'MNP_GESTIONE_RICHIESTA_CESS' AS TABELLA_ORIGINE
, MO.DESC_OLO AS CODICE_OPERATORE_RECIPIENT
, MO.ROUTING_NUMBER AS ROUTING_NUMBER
FROM
MNP_GESTIONE_RICHIESTA_CESS MGR, MNP_OLO O
, MNP_OLO_PREFISSI MOP INNER JOIN MNP_OLO MO ON MO.COD_OLO=MOP.COD_OLO
WHERE MGR.MSISDN IN ( '393276330000' , '393288825691' , '393291154276' , '393318806310' , '393333559969' , '393334100351' , '393336146249' , '393342619998' , '393346320565'
, '393346485003' , '393347137411' , '393357493056' , '393358320077' , '393381525418' , '393386128129' , '393394440718' , '393397925615' , '393402650849' , '393403250339'
, '393404090400' , '393421293174' , '393423838570' , '393457350261' , '393460926424' , '393461435422' , '393480672962' , '393481198300' , '393483855131' , '393485142050'
, '393487515463' , '393488959368' , '393490583568' , '393492449836' , '393495296549' , '393497083239' , '393737571533' , '393927061964' , '393928457910' , '393929504561'
)
AND (MOP.PREFIX = SUBSTR(MGR.MSISDN,3,3) OR MOP.PREFIX = SUBSTR(MGR.MSISDN,3,4))
AND O.DESC_OLO = MGR.CODICE_OPERATORE_RECIPIENT
) m_cur_bulk
)
WHERE rnum = 1
UNION ALL
SELECT ID_RICHIESTA, MSISDN, CODICE_OPERATORE_RECIPIENT, ROUTING_NUMBER, DATA_CUT_OVER, DATA_ESTRAZIONE, TABELLA_ORIGINE FROM (
SELECT m_cur_bulk.*, row_number() OVER (PARTITION BY MSISDN ORDER BY DATA_CUT_OVER DESC) rnum FROM (
SELECT
MGR.ID_RICHIESTA AS ID_RICHIESTA
, MGR.MSISDN AS MSISDN
, MGR.CODICE_OPERATORE_RECIPIENT AS CODICE_OPERATORE_RECIPIENT
, (SELECT A.ROUTING_NUMBER FROM MNP_OLO A WHERE A.DESC_OLO = MGR.CODICE_OPERATORE_RECIPIENT) AS ROUTING_NUMBER
, MGR.DATA_CUT_OVER AS DATA_CUT_OVER
, SYSDATE AS DATA_ESTRAZIONE
, 'HIST_GESTIONE_RICHIESTA' AS TABELLA_ORIGINE
FROM HIST_GESTIONE_RICHIESTA MGR
WHERE MGR.MSISDN IN ( '393276330000' , '393288825691' , '393291154276' , '393318806310' , '393333559969' , '393334100351' , '393336146249' , '393342619998' , '393346320565'
, '393346485003' , '393347137411' , '393357493056' , '393358320077' , '393381525418' , '393386128129' , '393394440718' , '393397925615' , '393402650849' , '393403250339'
, '393404090400' , '393421293174' , '393423838570' , '393457350261' , '393460926424' , '393461435422' , '393480672962' , '393481198300' , '393483855131' , '393485142050'
, '393487515463' , '393488959368' , '393490583568' , '393492449836' , '393495296549' , '393497083239' , '393737571533' , '393927061964' , '393928457910' , '393929504561'
)
AND MGR.STATO IN( 7, 9, 14, 15, 16, 99 )
) m_cur_bulk
)
WHERE rnum = 1
UNION ALL
SELECT ID_RICHIESTA, MSISDN, CODICE_OPERATORE_RECIPIENT, ROUTING_NUMBER, DATA_CUT_OVER, DATA_ESTRAZIONE, TABELLA_ORIGINE FROM (
SELECT m_cur_bulk.*, row_number() OVER (PARTITION BY MSISDN ORDER BY DATA_CUT_OVER DESC) rnum FROM (
SELECT
MGR.ID_RICHIESTA AS ID_RICHIESTA
, MGR.MSISDN AS MSISDN
, MGR.CODICE_OPERATORE_RECIPIENT AS CODICE_OPERATORE_RECIPIENT
, (SELECT A.ROUTING_NUMBER FROM MNP_OLO A WHERE A.DESC_OLO = MGR.CODICE_OPERATORE_RECIPIENT) AS ROUTING_NUMBER
, MGR.DATA_CUT_OVER AS DATA_CUT_OVER
, SYSDATE AS DATA_ESTRAZIONE
, 'HIST_GESTIONE_RICHIESTA_REC' AS TABELLA_ORIGINE
FROM HIST_GESTIONE_RICHIESTA_REC MGR
WHERE MGR.MSISDN IN ( '393276330000' , '393288825691' , '393291154276' , '393318806310' , '393333559969' , '393334100351' , '393336146249' , '393342619998' , '393346320565'
, '393346485003' , '393347137411' , '393357493056' , '393358320077' , '393381525418' , '393386128129' , '393394440718' , '393397925615' , '393402650849' , '393403250339'
, '393404090400' , '393421293174' , '393423838570' , '393457350261' , '393460926424' , '393461435422' , '393480672962' , '393481198300' , '393483855131' , '393485142050'
, '393487515463' , '393488959368' , '393490583568' , '393492449836' , '393495296549' , '393497083239' , '393737571533' , '393927061964' , '393928457910' , '393929504561'
)
AND MGR.STATO IN( 8, 10, 11, 12 )
) m_cur_bulk
)
WHERE rnum = 1
UNION ALL
SELECT ID_RICHIESTA, MSISDN, CODICE_OPERATORE_RECIPIENT, ROUTING_NUMBER, DATA_CUT_OVER, DATA_ESTRAZIONE, TABELLA_ORIGINE FROM (
SELECT m_cur_bulk.*, row_number() OVER (PARTITION BY MSISDN ORDER BY DATA_CUT_OVER DESC) rnum FROM (
SELECT
MGR.ID_RICHIESTA AS ID_RICHIESTA
, MGR.MSISDN AS MSISDN
, MGR.CODICE_OPERATORE_RECIPIENT AS CODICE_OPERATORE_RECIPIENT
, (SELECT A.ROUTING_NUMBER FROM MNP_OLO A WHERE A.DESC_OLO = MGR.CODICE_OPERATORE_RECIPIENT) AS ROUTING_NUMBER
, MGR.DATA_CUT_OVER AS DATA_CUT_OVER
, SYSDATE AS DATA_ESTRAZIONE
, 'HIST_GESTIONE_RICHIESTAPORTING' AS TABELLA_ORIGINE
FROM HIST_GESTIONE_RICHIESTAPORTING MGR
WHERE MGR.MSISDN IN ( '393276330000' , '393288825691' , '393291154276' , '393318806310' , '393333559969' , '393334100351' , '393336146249' , '393342619998' , '393346320565'
, '393346485003' , '393347137411' , '393357493056' , '393358320077' , '393381525418' , '393386128129' , '393394440718' , '393397925615' , '393402650849' , '393403250339'
, '393404090400' , '393421293174' , '393423838570' , '393457350261' , '393460926424' , '393461435422' , '393480672962' , '393481198300' , '393483855131' , '393485142050'
, '393487515463' , '393488959368' , '393490583568' , '393492449836' , '393495296549' , '393497083239' , '393737571533' , '393927061964' , '393928457910' , '393929504561'
)
) m_cur_bulk
)
WHERE rnum = 1
) ORDER BY MSISDN, DATA_CUT_OVER;

View File

@@ -0,0 +1,18 @@
-- 2018 C05 MNP_RU_524
--execute as MNP
--spool /mnpapp/log/script/dbc_Del147.log;
-----------------------------
--CREATE/MODIFY OBJECT
@@MNP_DDL_Del147_IDX_HIST.sql
@@MNP_DDL_Del147_IDX_LIVE.sql
@@MNP_DDL_Del147_PKG_DBP.sql
-----------------------------
--INSERT/UPDATE DATA
--@@dbcDML.sql
-----------------------------
commit;
spool off;

View File

@@ -0,0 +1,311 @@
CREATE OR REPLACE PACKAGE PKG_DBP AS
PROCEDURE estr_RICHIESTA (data_inizio IN DATE, data_fine IN DATE);
PROCEDURE estr_RICHIESTA_REC (data_inizio IN DATE, data_fine IN DATE);
PROCEDURE estr_RICHIESTA_PORTING (data_inizio IN DATE, data_fine IN DATE);
PROCEDURE estr_RICH_CESS_PORT (data_inizio IN DATE, data_fine IN DATE);
PROCEDURE estr_RICHIESTA_CESS (data_inizio IN DATE, data_fine IN DATE);
END PKG_DBP;
/
CREATE OR REPLACE package body PKG_DBP as
-- PROCESSO DONOR STANDARD/MVNO/PrjHoc
procedure estr_RICHIESTA(data_inizio IN DATE, data_fine IN DATE) IS
oldDataCutOver date ;
CURSOR SEL_RICHIESTA IS
SELECT mgr.id_richiesta AS ID_RICHIESTA
, NVL (mgr.msisdn, '') AS MSISDN
, mgr.codice_operatore_recipient AS CODICE_OPERATORE_RECIPIENT
, (SELECT A.ROUTING_NUMBER FROM MNP_OLO A WHERE A.DESC_OLO=MGR.CODICE_OPERATORE_RECIPIENT) AS ROUTING_NUMBER
, mgr.data_cut_over AS DATA_CUT_OVER, SYSDATE AS DATA_ESTRAZIONE
, 0 AS FLAG_LAVORATO
FROM mnp_gestione_richiesta mgr
WHERE STATO IN(7 --VALIDATAOK
,9 --ACCETTATA
,14 --INCESSAZIONE
,15 --CESSATA
,16 --ESPLETATA
,99 --BLOCCATA
)
AND mgr.DATA_CUT_OVER BETWEEN data_inizio and data_fine;
BEGIN
FOR rigaLetta IN SEL_RICHIESTA LOOP
BEGIN
INSERT INTO MNP_DBP2DBCFX (
ID_RICHIESTA, MSISDN, CODICE_OPERATORE_RECIPIENT,
ROUTING_NUMBER, DATA_CUT_OVER, DATA_ESTRAZIONE,
FLAG_LAVORATO)
VALUES ( rigaLetta.ID_RICHIESTA
,rigaLetta.MSISDN
,rigaLetta.CODICE_OPERATORE_RECIPIENT
,rigaLetta.ROUTING_NUMBER
,rigaLetta.DATA_CUT_OVER
,rigaLetta.DATA_ESTRAZIONE
,rigaLetta.FLAG_LAVORATO
);
EXCEPTION WHEN DUP_VAL_ON_INDEX THEN
BEGIN
SELECT DATA_CUT_OVER
INTO oldDataCutOver
FROM MNP_DBP2DBCFX
WHERE MSISDN = rigaLetta.MSISDN;
IF rigaLetta.DATA_CUT_OVER >= oldDataCutOver THEN
UPDATE MNP_DBP2DBCFX
SET ID_RICHIESTA=rigaLetta.ID_RICHIESTA
,CODICE_OPERATORE_RECIPIENT = rigaLetta.CODICE_OPERATORE_RECIPIENT
,ROUTING_NUMBER = rigaLetta.ROUTING_NUMBER
,DATA_CUT_OVER = rigaLetta.DATA_CUT_OVER
,DATA_ESTRAZIONE = rigaLetta.DATA_ESTRAZIONE
,FLAG_LAVORATO = rigaLetta.FLAG_LAVORATO
WHERE MSISDN = rigaLetta.MSISDN;
END IF;
END;
END;
END LOOP;
COMMIT;
return;
END estr_RICHIESTA;
-- PROCESSO RECIPIENT STANDARD/MVNO/PrjHoc
procedure estr_RICHIESTA_REC(data_inizio IN DATE, data_fine IN DATE) IS
oldDataCutOver date ;
CURSOR SEL_RICHIESTA IS
SELECT mgr.id_richiesta AS id_richiesta, NVL (mgr.msisdn, '') AS msisdn,
mgr.codice_operatore_recipient AS codice_operatore_recipient,
(SELECT A.ROUTING_NUMBER FROM MNP_OLO A WHERE A.DESC_OLO=MGR.CODICE_OPERATORE_RECIPIENT) AS ROUTING_NUMBER,
mgr.data_cut_over AS data_cut_over, SYSDATE AS data_estrazione,
0 AS flag_lavorato
FROM mnp_gestione_richiesta_rec mgr
WHERE STATO IN(8 --VALIDATA
,10 --ACCETTATA
,11 --ATTESAEVASIONE
,12 --EVASA
)
AND mgr.data_cut_over BETWEEN data_inizio AND data_fine;
BEGIN
FOR rigaLetta IN SEL_RICHIESTA LOOP
BEGIN
INSERT INTO MNP_DBP2DBCFX (
ID_RICHIESTA, MSISDN, CODICE_OPERATORE_RECIPIENT,
ROUTING_NUMBER, DATA_CUT_OVER, DATA_ESTRAZIONE,
FLAG_LAVORATO)
VALUES ( rigaLetta.ID_RICHIESTA
,rigaLetta.MSISDN
,rigaLetta.CODICE_OPERATORE_RECIPIENT
,rigaLetta.ROUTING_NUMBER
,rigaLetta.DATA_CUT_OVER
,rigaLetta.DATA_ESTRAZIONE
,rigaLetta.FLAG_LAVORATO
);
EXCEPTION WHEN DUP_VAL_ON_INDEX THEN
BEGIN
SELECT DATA_CUT_OVER
INTO oldDataCutOver
FROM MNP_DBP2DBCFX
WHERE MSISDN = rigaLetta.MSISDN;
IF rigaLetta.DATA_CUT_OVER >= oldDataCutOver THEN
UPDATE MNP_DBP2DBCFX
SET ID_RICHIESTA=rigaLetta.ID_RICHIESTA
,CODICE_OPERATORE_RECIPIENT = rigaLetta.CODICE_OPERATORE_RECIPIENT
,ROUTING_NUMBER = rigaLetta.ROUTING_NUMBER
,DATA_CUT_OVER = rigaLetta.DATA_CUT_OVER
,DATA_ESTRAZIONE = rigaLetta.DATA_ESTRAZIONE
,FLAG_LAVORATO = rigaLetta.FLAG_LAVORATO
WHERE MSISDN = rigaLetta.MSISDN;
END IF;
END;
END;
END LOOP;
COMMIT;
return;
END estr_RICHIESTA_REC;
-- PROCESSO PORTING TERZE PARTI
procedure estr_RICHIESTA_PORTING(data_inizio IN DATE, data_fine IN DATE) IS
oldDataCutOver date ;
CURSOR SEL_RICHIESTA IS
SELECT mgr.id_richiesta AS id_richiesta, NVL (mgr.msisdn, '') AS msisdn,
mgr.codice_operatore_recipient AS codice_operatore_recipient,
(SELECT A.ROUTING_NUMBER FROM MNP_OLO A WHERE A.DESC_OLO=MGR.CODICE_OPERATORE_RECIPIENT) AS ROUTING_NUMBER,
mgr.data_cut_over AS data_cut_over, SYSDATE AS data_estrazione,
0 AS flag_lavorato
FROM mnp_gestione_richiesta_porting mgr
where mgr.data_cut_over BETWEEN data_inizio AND data_fine;
BEGIN
FOR rigaLetta IN SEL_RICHIESTA LOOP
BEGIN
INSERT INTO MNP_DBP2DBCFX (
ID_RICHIESTA, MSISDN, CODICE_OPERATORE_RECIPIENT,
ROUTING_NUMBER, DATA_CUT_OVER, DATA_ESTRAZIONE,
FLAG_LAVORATO)
VALUES ( rigaLetta.ID_RICHIESTA
,rigaLetta.MSISDN
,rigaLetta.CODICE_OPERATORE_RECIPIENT
,rigaLetta.ROUTING_NUMBER
,rigaLetta.DATA_CUT_OVER
,rigaLetta.DATA_ESTRAZIONE
,rigaLetta.FLAG_LAVORATO
);
EXCEPTION WHEN DUP_VAL_ON_INDEX THEN
BEGIN
SELECT DATA_CUT_OVER
INTO oldDataCutOver
FROM MNP_DBP2DBCFX
WHERE MSISDN = rigaLetta.MSISDN;
IF rigaLetta.DATA_CUT_OVER >= oldDataCutOver THEN
UPDATE MNP_DBP2DBCFX
SET ID_RICHIESTA=rigaLetta.ID_RICHIESTA
,CODICE_OPERATORE_RECIPIENT = rigaLetta.CODICE_OPERATORE_RECIPIENT
,ROUTING_NUMBER = rigaLetta.ROUTING_NUMBER
,DATA_CUT_OVER = rigaLetta.DATA_CUT_OVER
,DATA_ESTRAZIONE = rigaLetta.DATA_ESTRAZIONE
,FLAG_LAVORATO = rigaLetta.FLAG_LAVORATO
WHERE MSISDN = rigaLetta.MSISDN;
END IF;
END;
END;
END LOOP;
COMMIT;
return;
END estr_RICHIESTA_PORTING;
-- PROCESSO CESSAZIONI PORTING
procedure estr_RICH_CESS_PORT(data_inizio IN DATE, data_fine IN DATE) IS
oldDataCutOver date ;
CURSOR SEL_RICHIESTA IS
SELECT mgr.id_richiesta AS id_richiesta, NVL (mgr.msisdn, '') AS msisdn,
o.desc_olo AS codice_operatore_recipient,
o.ROUTING_NUMBER AS routing_number,
mgr.data_cut_over AS data_cut_over, SYSDATE AS data_estrazione,
0 AS flag_lavorato
FROM mnp_gestione_rich_CESS_PORT mgr, mnp_olo o
where mgr.data_cut_over BETWEEN data_inizio AND data_fine
AND (mgr.STATO='4' OR
(mgr.stato='2' AND NOT EXISTS (SELECT 1 FROM MNP_OLO MO, MNP_OLO_PREFISSI MOP
WHERE MO.DESC_OLO IN('TIMT','TIMG')
AND MOP.COD_OLO=MO.COD_OLO
AND MOP.PREFIX=substr(mgr.MSISDN,3,3)
) )
)
AND o.DESC_OLO=mgr.CODICE_OPERATORE_RECIPIENT;
BEGIN
FOR rigaLetta IN SEL_RICHIESTA LOOP
BEGIN
INSERT INTO MNP_DBP2DBCFX (
ID_RICHIESTA, MSISDN, CODICE_OPERATORE_RECIPIENT,
ROUTING_NUMBER, DATA_CUT_OVER, DATA_ESTRAZIONE,
FLAG_LAVORATO)
VALUES ( rigaLetta.ID_RICHIESTA
,rigaLetta.MSISDN
,rigaLetta.CODICE_OPERATORE_RECIPIENT
,rigaLetta.ROUTING_NUMBER
,rigaLetta.DATA_CUT_OVER
,rigaLetta.DATA_ESTRAZIONE
,rigaLetta.FLAG_LAVORATO
);
EXCEPTION WHEN DUP_VAL_ON_INDEX THEN
BEGIN
SELECT DATA_CUT_OVER
INTO oldDataCutOver
FROM MNP_DBP2DBCFX
WHERE MSISDN = rigaLetta.MSISDN;
IF rigaLetta.DATA_CUT_OVER >= oldDataCutOver THEN
UPDATE MNP_DBP2DBCFX
SET ID_RICHIESTA=rigaLetta.ID_RICHIESTA
,CODICE_OPERATORE_RECIPIENT = rigaLetta.CODICE_OPERATORE_RECIPIENT
,ROUTING_NUMBER = rigaLetta.ROUTING_NUMBER
,DATA_CUT_OVER = rigaLetta.DATA_CUT_OVER
,DATA_ESTRAZIONE = rigaLetta.DATA_ESTRAZIONE
,FLAG_LAVORATO = rigaLetta.FLAG_LAVORATO
WHERE MSISDN = rigaLetta.MSISDN;
END IF;
END;
END;
END LOOP;
COMMIT;
return;
END estr_RICH_CESS_PORT;
-- PROCESSO CESSAZIONI
procedure estr_RICHIESTA_CESS(data_inizio IN DATE, data_fine IN DATE) IS
oldDataCutOver date ;
CURSOR SEL_RICHIESTA IS
SELECT mgr.id_richiesta AS id_richiesta, NVL (mgr.msisdn, '') AS msisdn,
o.desc_olo AS codice_operatore_recipient,
o.ROUTING_NUMBER AS routing_number,
mgr.data_cut_over AS data_cut_over, SYSDATE AS data_estrazione,
0 AS flag_lavorato
FROM mnp_gestione_richiesta_CESS mgr, mnp_olo o , MNP_OLO_PREFISSI MOP, mnp_olo mo
where mgr.data_cut_over BETWEEN data_inizio AND data_fine
AND o.DESC_OLO=mgr.CODICE_OPERATORE_RECIPIENT
and MOP.PREFIX=substr(mgr.MSISDN,3,3)
and mo.COD_OLO=mop.cod_olo;
BEGIN
FOR rigaLetta IN SEL_RICHIESTA LOOP
BEGIN
INSERT INTO MNP_DBP2DBCFX (
ID_RICHIESTA, MSISDN, CODICE_OPERATORE_RECIPIENT,
ROUTING_NUMBER, DATA_CUT_OVER, DATA_ESTRAZIONE,
FLAG_LAVORATO)
VALUES ( rigaLetta.ID_RICHIESTA
,rigaLetta.MSISDN
,rigaLetta.CODICE_OPERATORE_RECIPIENT
,rigaLetta.ROUTING_NUMBER
,rigaLetta.DATA_CUT_OVER
,rigaLetta.DATA_ESTRAZIONE
,rigaLetta.FLAG_LAVORATO
);
EXCEPTION WHEN DUP_VAL_ON_INDEX THEN
BEGIN
SELECT DATA_CUT_OVER
INTO oldDataCutOver
FROM MNP_DBP2DBCFX
WHERE MSISDN = rigaLetta.MSISDN;
IF rigaLetta.DATA_CUT_OVER >= oldDataCutOver THEN
UPDATE MNP_DBP2DBCFX
SET ID_RICHIESTA=rigaLetta.ID_RICHIESTA
,CODICE_OPERATORE_RECIPIENT = rigaLetta.CODICE_OPERATORE_RECIPIENT
,ROUTING_NUMBER = rigaLetta.ROUTING_NUMBER
,DATA_CUT_OVER = rigaLetta.DATA_CUT_OVER
,DATA_ESTRAZIONE = rigaLetta.DATA_ESTRAZIONE
,FLAG_LAVORATO = rigaLetta.FLAG_LAVORATO
WHERE MSISDN = rigaLetta.MSISDN;
END IF;
END;
END;
END LOOP;
COMMIT;
return;
END estr_RICHIESTA_CESS;
END PKG_DBP;
/