DECLARE V_DATA_CURR DATE; V_DATA_MAX date; V_RECIPIENT_NEW varchar2(10); BEGIN -- INTEGRAZIONE CON I DONOR E I REC_VIRT TRA OTTOBRE ED APRILE FOR R_INTEGRAZIONE_VAR IN ( SELECT 'V' TIPO_RECORDO, SUBSTR(R.MSISDN, 3) MSISDN, R.DATA_CUT_OVER_EFF, R.CODICE_OPERATORE_REC_EFF RECIPIENT_NEW FROM MNP_GESTIONE_RICHIESTA R WHERE (R.MSISDN, R.DATA_CUT_OVER_EFF) IN ( SELECT R1.MSISDN, MAX(R1.DATA_CUT_OVER_EFF) FROM MNP_GESTIONE_RICHIESTA R1 WHERE R1.DATA_CUT_OVER_EFF BETWEEN TO_DATE('01102012','DDMMYYYY') AND TO_DATE('12042013','DDMMYYYY') AND R1.STATO NOT IN (22,12,10,4) AND R1.TIPO_CLIENTE = 'CO' GROUP BY R1.MSISDN ) UNION SELECT 'V' TIPO_RECORDO, SUBSTR(RV.MSISDN, 3) MSISDN, RV.DATA_CUT_OVER_EFF, RV.CODICE_OPERATORE_RECIPIENT RECIPIENT_NEW FROM MNP_GEST_RICH_REC_VIRT RV WHERE (RV.MSISDN, RV.DATA_CUT_OVER_EFF) IN ( SELECT RV1.MSISDN, MAX(RV1.DATA_CUT_OVER_EFF) FROM MNP_GEST_RICH_REC_VIRT RV1 WHERE RV1.DATA_CUT_OVER_EFF BETWEEN TO_DATE('01102012','DDMMYYYY') AND TO_DATE('12042013','DDMMYYYY') AND RV1.STATO NOT IN (7,9) AND RV1.TIPO_CLIENTE = 'CO' GROUP BY RV1.MSISDN ) ) LOOP -- INSERIMENTO IN TABELLA BEGIN INSERT INTO MNP_DBC_VARIAZIONE_OLO (tipo_record, num_tel, data, recipient_new) VALUES (R_INTEGRAZIONE_VAR.TIPO_RECORDO, R_INTEGRAZIONE_VAR.MSISDN, R_INTEGRAZIONE_VAR.DATA_CUT_OVER_EFF,R_INTEGRAZIONE_VAR.RECIPIENT_NEW); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN SELECT DATA INTO V_DATA_CURR FROM MNP_DBC_VARIAZIONE_OLO WHERE NUM_TEL = R_INTEGRAZIONE_VAR.MSISDN; IF V_DATA_CURR < R_INTEGRAZIONE_VAR.DATA_CUT_OVER_EFF THEN UPDATE MNP_DBC_VARIAZIONE_OLO SET DATA = R_INTEGRAZIONE_VAR.DATA_CUT_OVER_EFF, RECIPIENT_NEW = R_INTEGRAZIONE_VAR.RECIPIENT_NEW WHERE NUM_TEL = R_INTEGRAZIONE_VAR.MSISDN; END IF; END; COMMIT; END LOOP; -- -- AGGIORNAMENTO DEI CAMPI DATA E RECIPIENT_NEW VERIFICANDO LA PRESENZA DI PORTING TERZE PARTI O RECIPIENT TIM FOR R_VAR_MSISDN IN ( SELECT * FROM MNP_DBC_VARIAZIONE_OLO WHERE LAVORATO IS NULL ) LOOP BEGIN SELECT * INTO V_DATA_MAX, V_RECIPIENT_NEW FROM ( SELECT q.* FROM ( SELECT P.DATA_CUT_OVER DATA, P.CODICE_OPERATORE_RECIPIENT REC_NEW FROM MNP_GESTIONE_RICHIESTA_PORTING P WHERE (P.MSISDN, P.DATA_CUT_OVER) IN ( SELECT MSISDN, MAX(P1.DATA_CUT_OVER) FROM MNP_GESTIONE_RICHIESTA_PORTING P1 WHERE P1.STATO = 6 AND P1.DATA_CUT_OVER BETWEEN TO_DATE('01102012','DDMMYYYY') AND TO_DATE('12042013','DDMMYYYY') AND P1.MSISDN = '39'||R_VAR_MSISDN.NUM_TEL GROUP BY P1.MSISDN ) UNION SELECT R.DATA_CUT_OVER_EFF DATA, R.CODICE_OPERATORE_REC_EFF REC_NEW FROM MNP_GESTIONE_RICHIESTA_REC R WHERE (R.MSISDN, R.DATA_CUT_OVER_EFF) IN ( SELECT R1.MSISDN, MAX(R1.DATA_CUT_OVER_EFF) FROM MNP_GESTIONE_RICHIESTA_REC R1 WHERE R1.DATA_CUT_OVER_EFF BETWEEN TO_DATE('01102012','DDMMYYYY') AND TO_DATE('12042013','DDMMYYYY') AND R1.STATO = 12 AND R1.TIPO_CLIENTE = 'CO' AND R1.MSISDN = '39'||R_VAR_MSISDN.NUM_TEL GROUP BY R1.MSISDN ) UNION SELECT DV.DATA_CUT_OVER_EFF DATA, DV.CODICE_OPERATORE_RECIPIENT REC_NEW FROM MNP_GEST_RICH_DONOR_VIRT DV WHERE (DV.MSISDN, DV.DATA_CUT_OVER_EFF) IN ( SELECT DV1.MSISDN, MAX(DV1.DATA_CUT_OVER_EFF) FROM MNP_GEST_RICH_DONOR_VIRT DV1 WHERE DV1.DATA_CUT_OVER_EFF BETWEEN TO_DATE('01102012','DDMMYYYY') AND TO_DATE('12042013','DDMMYYYY') AND DV1.STATO = 11 AND DV1.TIPO_CLIENTE = 'CO' AND DV1.MSISDN = '39'||R_VAR_MSISDN.NUM_TEL GROUP BY DV1.MSISDN ) ) q ORDER BY q.data desc) WHERE rownum <2; UPDATE MNP_DBC_VARIAZIONE_OLO SET DATA = V_DATA_MAX, RECIPIENT_NEW = V_RECIPIENT_NEW, LAVORATO = 1 WHERE NUM_TEL = R_VAR_MSISDN.NUM_TEL; COMMIT; EXCEPTION WHEN NO_DATA_FOUND THEN V_DATA_MAX := NULL; V_RECIPIENT_NEW := NULL; -- UPDATE MNP_DBC_VARIAZIONE_OLO SET LAVORATO = 1 WHERE NUM_TEL = R_VAR_MSISDN.NUM_TEL; COMMIT; END; END LOOP; END; / TRUNCATE TABLE MNP_DBC_CESSAZIONE_OLO; INSERT INTO MNP_DBC_CESSAZIONE_OLO SELECT 'C', SUBSTR(CP.MSISDN, 3), CP.DATA_CUT_OVER FROM MNP_GESTIONE_RICH_CESS_PORT CP, MNP_STORICO_CESS_PORTING SCP WHERE CP.ID_RICHIESTA = SCP.ID_RICHIESTA AND SCP.STATO_A = 2 AND SCP.DATA_LAVORAZIONE BETWEEN TO_DATE('01102012', 'DDMMYYYY') AND TO_DATE('12042013', 'DDMMYYYY') UNION SELECT 'C', SUBSTR(C.MSISDN, 3), C.DATA_CUT_OVER FROM MNP_GESTIONE_RICHIESTA_CESS C, MNP_STORICO_CESS SC WHERE C.ID_RICHIESTA = SC.ID_RICHIESTA AND SC.STATO_A = 3 AND SC.DATA_LAVORAZIONE BETWEEN TO_DATE('01102012', 'DDMMYYYY') AND TO_DATE('12042013', 'DDMMYYYY'); COMMIT; DELETE MNP_DBC_VARIAZIONE_OLO WHERE NUM_TEL IN ( SELECT NUM_TEL FROM MNP_DBC_CESSAZIONE_OLO ); COMMIT;