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,17 @@
CREATE TABLE MNP_DBP2COOP
(
MSISDN VARCHAR2(20 BYTE) NOT NULL,
CODICE_OPERATORE_RECIPIENT VARCHAR2(4 BYTE),
ROUTING_NUMBER VARCHAR2(10 BYTE) DEFAULT NULL,
DATA_CUT_OVER DATE,
DATA_ESTRAZIONE DATE NOT NULL,
FLAG_LAVORATO NUMBER(1) DEFAULT 0 NOT NULL
)
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
NOMONITORING;
ALTER TABLE MNP_DBP2COOP ADD CONSTRAINT PK_MNP_DBP2COOP PRIMARY KEY (MSISDN) USING INDEX TABLESPACE TAB_IDX_MEDIUM;

View File

@@ -0,0 +1,7 @@
CREATE TABLE MNP_DBP2COOP_DATE
(
START_DATE VARCHAR2(8 BYTE),
END_DATE VARCHAR2(8 BYTE),
FINAL_DATE VARCHAR2(8 BYTE)
);

View File

@@ -0,0 +1,142 @@
-- Execute as user MNP
-- 2022 C05 MNP_RU_XXX
-- full export of porting history to OLOs
-- Full extract for DNs in test set, with name of table of origin.
SELECT * FROM (
SELECT 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.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
, 'MNP_GESTIONE_RICHIESTA' AS TABELLA_ORIGINE
FROM MNP_GESTIONE_RICHIESTA MGR
WHERE MGR.MSISDN IN (:X)
AND MGR.STATO = 16
) m_cur_bulk
)
WHERE rnum = 1
UNION ALL
SELECT 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.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
, 'MNP_GESTIONE_RICHIESTA_REC' AS TABELLA_ORIGINE
FROM MNP_GESTIONE_RICHIESTA_REC MGR
WHERE MGR.MSISDN IN (:X)
AND MGR.STATO = 12
) m_cur_bulk
)
WHERE rnum = 1
UNION ALL
SELECT 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.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 (:X)
AND MGR.STATO = 6
) m_cur_bulk
)
WHERE rnum = 1
UNION ALL
SELECT 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.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
, '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 (:X)
AND ( MOP.PREFIX=SUBSTR(MGR.MSISDN,3,3) OR MOP.PREFIX=SUBSTR(MGR.MSISDN,3,4) )
AND MGR.STATO = '2'
AND O.DESC_OLO=MGR.CODICE_OPERATORE_RECIPIENT
) m_cur_bulk
)
WHERE rnum = 1
UNION ALL
SELECT 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.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
, '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 (:X)
AND (MOP.PREFIX = SUBSTR(MGR.MSISDN,3,3) OR MOP.PREFIX = SUBSTR(MGR.MSISDN,3,4))
AND MGR.STATO = '3'
AND O.DESC_OLO = MGR.CODICE_OPERATORE_RECIPIENT
) m_cur_bulk
)
WHERE rnum = 1
UNION ALL
SELECT 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.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
, 'HIST_GESTIONE_RICHIESTA' AS TABELLA_ORIGINE
FROM HIST_GESTIONE_RICHIESTA MGR
WHERE MGR.MSISDN IN (:X)
AND MGR.STATO = 16
) m_cur_bulk
)
WHERE rnum = 1
UNION ALL
SELECT 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.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
, 'HIST_GESTIONE_RICHIESTA_REC' AS TABELLA_ORIGINE
FROM HIST_GESTIONE_RICHIESTA_REC MGR
WHERE MGR.MSISDN IN (:X)
AND MGR.STATO = 12
) m_cur_bulk
)
WHERE rnum = 1
UNION ALL
SELECT 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.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 (:X)
AND MGR.STATO = 6
) m_cur_bulk
)
WHERE rnum = 1
) ORDER BY MSISDN, DATA_CUT_OVER;

View File

@@ -0,0 +1,481 @@
-- Execute as user MNP
-- 2022 C05 MNP_RU_XXX
-- full export of porting history to OLOs
-- DDL 2/2
-- CREATE PKG_DBP_COOP to export of porting history to OLOs
-- Per le CESSAZIONI riportare come CODICE_OPERATORE_RECIPIENT
-- l'OLO proprietario originale del DN (come da prefisso)
CREATE OR REPLACE PACKAGE PKG_DBP_COOP 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_COOP;
/
CREATE OR REPLACE PACKAGE BODY PKG_DBP_COOP AS
-- ===============================================================================
-- 2022 C05 MNP_RU_XXX 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_DBP2COOP m_tgt
USING (
SELECT 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.MSISDN AS MSISDN
, MGR.CODICE_OPERATORE_RECIPIENT AS CODICE_OPERATORE_RECIPIENT
, MO.ROUTING_NUMBER 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 INNER JOIN MNP_OLO MO ON MO.DESC_OLO=MGR.CODICE_OPERATORE_RECIPIENT
WHERE MGR.MSISDN IS NOT NULL AND MO.ROUTING_NUMBER IS NOT NULL
AND MGR.DATA_CUT_OVER_CALC BETWEEN in_data_inizio AND in_data_fine
AND STATO = 16 --ESPLETATA
) m_cur_bulk
)
WHERE rnum = 1
) m_cur
ON (m_cur.MSISDN = m_tgt.MSISDN)
WHEN MATCHED THEN
UPDATE SET
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 (
MSISDN
, CODICE_OPERATORE_RECIPIENT
, ROUTING_NUMBER
, DATA_CUT_OVER
, DATA_ESTRAZIONE
, FLAG_LAVORATO
) VALUES (
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;
-- ===============================================================================
-- 2022 C05 MNP_RU_XXX 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_DBP2COOP m_tgt
USING (
SELECT 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.MSISDN AS MSISDN
, MGR.CODICE_OPERATORE_RECIPIENT AS CODICE_OPERATORE_RECIPIENT
, MO.ROUTING_NUMBER 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 INNER JOIN MNP_OLO MO ON MO.DESC_OLO=MGR.CODICE_OPERATORE_RECIPIENT
WHERE MGR.MSISDN IS NOT NULL AND MO.ROUTING_NUMBER IS NOT NULL
AND MGR.DATA_CUT_OVER_AOM BETWEEN in_data_inizio AND in_data_fine
AND STATO = 12 --EVASA
) m_cur_bulk
)
WHERE rnum = 1
) m_cur
ON (m_cur.MSISDN = m_tgt.MSISDN)
WHEN MATCHED THEN
UPDATE SET
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 (
MSISDN
, CODICE_OPERATORE_RECIPIENT
, ROUTING_NUMBER
, DATA_CUT_OVER
, DATA_ESTRAZIONE
, FLAG_LAVORATO
) VALUES (
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;
-- ===============================================================================
-- 2022 C05 MNP_RU_XXX 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_DBP2COOP m_tgt
USING (
SELECT 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.MSISDN AS MSISDN
, MGR.CODICE_OPERATORE_RECIPIENT AS CODICE_OPERATORE_RECIPIENT
, MO.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_PORTING MGR INNER JOIN MNP_OLO MO ON MO.DESC_OLO=MGR.CODICE_OPERATORE_RECIPIENT
WHERE MGR.MSISDN IS NOT NULL AND MO.ROUTING_NUMBER IS NOT NULL
AND MGR.DATA_CUT_OVER BETWEEN in_data_inizio AND in_data_fine
AND MGR.STATO = 6 -- ESPLETATA
) m_cur_bulk
)
WHERE rnum = 1
) m_cur
ON (m_cur.MSISDN = m_tgt.MSISDN)
WHEN MATCHED THEN
UPDATE SET
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 (
MSISDN
, CODICE_OPERATORE_RECIPIENT
, ROUTING_NUMBER
, DATA_CUT_OVER
, DATA_ESTRAZIONE
, FLAG_LAVORATO
) VALUES (
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;
-- ===============================================================================
-- 2022 C05 MNP_RU_XXX Procedura #4/8
-- PROCESSO CESSAZIONI PORTING
-- STATO 4 = CESSATA
-- 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_RICH_CESS_PORT(in_data_inizio IN DATE, in_data_fine IN DATE) IS
BEGIN
MERGE INTO MNP_DBP2COOP m_tgt
USING (
SELECT 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.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 MO.ROUTING_NUMBER 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='2' -- CESSATA
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
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 (
MSISDN
, CODICE_OPERATORE_RECIPIENT
, ROUTING_NUMBER
, DATA_CUT_OVER
, DATA_ESTRAZIONE
, FLAG_LAVORATO
) VALUES (
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;
-- ===============================================================================
-- 2022 C05 MNP_RU_XXX 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_DBP2COOP m_tgt
USING (
SELECT 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.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 MO.ROUTING_NUMBER 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='3' -- CESSATA
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
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 (
MSISDN
, CODICE_OPERATORE_RECIPIENT
, ROUTING_NUMBER
, DATA_CUT_OVER
, DATA_ESTRAZIONE
, FLAG_LAVORATO
) VALUES (
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;
-- ===============================================================================
-- 2022 C05 MNP_RU_XXX 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_DBP2COOP m_tgt
USING (
SELECT 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.MSISDN AS MSISDN
, MGR.CODICE_OPERATORE_RECIPIENT AS CODICE_OPERATORE_RECIPIENT
, MO.ROUTING_NUMBER 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 INNER JOIN MNP_OLO MO ON MO.DESC_OLO=MGR.CODICE_OPERATORE_RECIPIENT
WHERE MGR.MSISDN IS NOT NULL AND MO.ROUTING_NUMBER IS NOT NULL
AND MGR.DATA_CUT_OVER_CALC BETWEEN in_data_inizio AND in_data_fine
AND MGR.STATO = 16 --ESPLETATA
) m_cur_bulk
)
WHERE rnum = 1
) m_cur
ON (m_cur.MSISDN = m_tgt.MSISDN)
WHEN MATCHED THEN
UPDATE SET
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 (
MSISDN
, CODICE_OPERATORE_RECIPIENT
, ROUTING_NUMBER
, DATA_CUT_OVER
, DATA_ESTRAZIONE
, FLAG_LAVORATO
) VALUES (
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;
-- ===============================================================================
-- 2022 C05 MNP_RU_XXX 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_DBP2COOP m_tgt
USING (
SELECT 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.MSISDN AS MSISDN
, MGR.CODICE_OPERATORE_RECIPIENT AS CODICE_OPERATORE_RECIPIENT
, MO.ROUTING_NUMBER 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 INNER JOIN MNP_OLO MO ON MO.DESC_OLO=MGR.CODICE_OPERATORE_RECIPIENT
WHERE MGR.MSISDN IS NOT NULL AND MO.ROUTING_NUMBER IS NOT NULL
AND MGR.DATA_CUT_OVER_AOM BETWEEN in_data_inizio AND in_data_fine
AND MGR.STATO = 12 --EVASA
) m_cur_bulk
)
WHERE rnum = 1
) m_cur
ON (m_cur.MSISDN = m_tgt.MSISDN)
WHEN MATCHED THEN
UPDATE SET
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 (
MSISDN
, CODICE_OPERATORE_RECIPIENT
, ROUTING_NUMBER
, DATA_CUT_OVER
, DATA_ESTRAZIONE
, FLAG_LAVORATO
) VALUES (
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;
-- ===============================================================================
-- 2022 C05 MNP_RU_XXX 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_DBP2COOP m_tgt
USING (
SELECT 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.MSISDN AS MSISDN
, MGR.CODICE_OPERATORE_RECIPIENT AS CODICE_OPERATORE_RECIPIENT
, MO.ROUTING_NUMBER AS ROUTING_NUMBER
, MGR.DATA_CUT_OVER AS DATA_CUT_OVER
, SYSDATE AS DATA_ESTRAZIONE
, 0 AS FLAG_LAVORATO
FROM HIST_GESTIONE_RICHIESTAPORTING MGR INNER JOIN MNP_OLO MO ON MO.DESC_OLO=MGR.CODICE_OPERATORE_RECIPIENT
WHERE MGR.MSISDN IS NOT NULL AND MO.ROUTING_NUMBER IS NOT NULL
AND MGR.DATA_CUT_OVER BETWEEN in_data_inizio AND in_data_fine
AND MGR.STATO = 6 -- ESPLETATA
) m_cur_bulk
)
WHERE rnum = 1
) m_cur
ON (m_cur.MSISDN = m_tgt.MSISDN)
WHEN MATCHED THEN
UPDATE SET
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 (
MSISDN
, CODICE_OPERATORE_RECIPIENT
, ROUTING_NUMBER
, DATA_CUT_OVER
, DATA_ESTRAZIONE
, FLAG_LAVORATO
) VALUES (
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_COOP;
/

View File

@@ -0,0 +1,18 @@
-- 2022 C05 MNP_RU_XXX
--execute as MNP
--spool /mnpapp/log/script/dbc_export_coop.log;
-----------------------------
--CREATE/MODIFY OBJECT
@@DDL_mnp_dbp2coop.sql
@@DDL_mnp_dbp2coop_date.sql
@@MNP_DDL_PKG_DBP_COOP.sql
-----------------------------
--INSERT/UPDATE DATA
--@@dbcDML.sql
-----------------------------
commit;
spool off;