CREATE OR REPLACE PROCEDURE UPDATE_PORTING_DELTA ( mese_in IN NUMBER, anno_in IN NUMBER, cod_errore IN OUT NUMBER ) IS primo_giorno_mese DATE; -- Primo giorno lavorativo del mese di riferiemnto ultimo_giorno_mese DATE; -- Ultimo giorno lavorativo del mese di riferiemnto errore NUMBER (1) := 0; -- Purpose: Aggiornamento al mese di riferimento della tabella mnp_dw_donor_delta -- -- MODIFICATION HISTORY -- Person Date Comments -- L.Marcucci 16/08/2004 ------------------------------------------- BEGIN cod_errore := 0; primo_giorno_mese := dwh.fun_primo_giorno_lavorativo (mese_in, anno_in); ultimo_giorno_mese := dwh.fun_ultimo_giorno_lavorativo (mese_in, anno_in); DELETE FROM dwh.mnp_dw_porting_delta; COMMIT; INSERT INTO dwh.mnp_dw_porting_delta (id_richiesta, aom_recipient, msisdn, data_ricezione_richiesta, data_cut_over_calc) SELECT gr.id_richiesta, gr.codice_operatore_recipient, gr.msisdn, gr.dataricezionerichiesta, gr.data_cut_over FROM mnp.mnp_gestione_richiesta_porting gr WHERE gr.dataricezionerichiesta >= to_date('26-APR-2004','dd-MON-YYYY') AND gr.dataricezionerichiesta <= ultimo_giorno_mese AND ( gr.data_fine_processo IS NULL OR (gr.data_fine_processo >= primo_giorno_mese) ); COMMIT; dwh.update_porting_delta_2 (ultimo_giorno_mese, errore); IF errore = 0 THEN MERGE INTO dwh.mnp_dw_porting t USING dwh.mnp_dw_porting_delta s ON (t.id_richiesta = s.id_richiesta) WHEN MATCHED THEN UPDATE SET t.aom_recipient = s.aom_recipient, t.msisdn = s.msisdn, t.data_ricezione_richiesta = s.data_ricezione_richiesta, t.data_configurazione_teorica = s.data_configurazione_teorica, t.data_configurazione_effettiva = s.data_configurazione_effettiva, t.data_cut_over_calc = s.data_cut_over_calc, t.data_cut_over_effettiva = s.data_cut_over_effettiva, t.stato = s.stato, t.data_stato_finale = s.data_stato_finale WHEN NOT MATCHED THEN INSERT (id_richiesta, aom_recipient, msisdn, data_ricezione_richiesta, data_configurazione_teorica, data_configurazione_effettiva, data_cut_over_calc, data_cut_over_effettiva, stato, data_stato_finale) VALUES (s.id_richiesta, s.aom_recipient, s.msisdn, s.data_ricezione_richiesta, s.data_configurazione_teorica, s.data_configurazione_effettiva, s.data_cut_over_calc, s.data_cut_over_effettiva, s.stato, s.data_stato_finale); COMMIT; ELSE cod_errore := 1; END IF; EXCEPTION WHEN OTHERS THEN cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in UPDATE_PORTING_DELTA ' || SQLERRM); RETURN; END; -- Procedure /