CREATE OR REPLACE PROCEDURE UPDATE_REC_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_rec_delta; COMMIT; INSERT INTO dwh.mnp_dw_rec_delta (id_richiesta, aom_donor, msisdn, tipo_linea, data_ricezione_richiesta, data_validazione_max, data_cut_over_aom) SELECT gr.id_richiesta, gr.codice_operatore_donating, gr.msisdn, gr.tipo_cliente, gr.dataricezionerichiesta, TRUNC (gr.data_validazione_max), TRUNC (gr.data_cut_over_aom) FROM mnp.mnp_gestione_richiesta_rec gr WHERE gr.richiestaadhoc = '0' AND gr.codice_operatore_donating <> 'TIMT' AND 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; DELETE FROM dwh.mnp_dw_rec_terzeparti_delta; COMMIT; INSERT INTO dwh.mnp_dw_rec_terzeparti_delta (id_richiesta, aom_terze_parti) SELECT dwt.id_richiesta, o.desc_olo FROM dwh.mnp_dw_rec_delta dwt, mnp.mnp_olo o WHERE o.flag_terze_parti = 1 AND o.desc_olo <> dwt.aom_donor; COMMIT; dwh.update_rec_delta_2 (ultimo_giorno_mese, errore); IF errore = 0 THEN dwh.update_rec_terze_parti (ultimo_giorno_mese, errore); IF errore = 0 THEN MERGE INTO dwh.mnp_dw_rec t USING dwh.mnp_dw_rec_delta s ON (t.id_richiesta = s.id_richiesta) WHEN MATCHED THEN UPDATE SET t.aom_donor = s.aom_donor, t.msisdn = s.msisdn, t.tipo_linea = s.tipo_linea, t.data_ricezione_richiesta = s.data_ricezione_richiesta, t.data_invio_ad_aom = s.data_invio_ad_aom, t.data_presa_in_carico = s.data_presa_in_carico, t.data_validazione_max = s.data_validazione_max, t.data_validazione = s.data_validazione, t.causale_rifiuto = s.causale_rifiuto, t.data_espletamento_donating = s.data_espletamento_donating, t.data_cut_over_aom = s.data_cut_over_aom, t.stato = s.stato, t.data_stato_finale = s.data_stato_finale WHEN NOT MATCHED THEN INSERT (id_richiesta, aom_donor, msisdn, tipo_linea, data_ricezione_richiesta, data_invio_ad_aom, data_presa_in_carico, data_validazione_max, data_validazione, causale_rifiuto, data_espletamento_donating, data_cut_over_aom, stato, data_stato_finale) VALUES (s.id_richiesta, s.aom_donor, s.msisdn, s.tipo_linea, s.data_ricezione_richiesta, s.data_invio_ad_aom, s.data_presa_in_carico, s.data_validazione_max, s.data_validazione, s.causale_rifiuto, s.data_espletamento_donating, s.data_cut_over_aom, s.stato, s.data_stato_finale); COMMIT; MERGE INTO dwh.mnp_dw_rec_terzeparti t USING dwh.mnp_dw_rec_terzeparti_delta s ON ( t.id_richiesta = s.id_richiesta AND t.aom_terze_parti = s.aom_terze_parti) WHEN MATCHED THEN UPDATE SET t.data_configurazione_teorica = s.data_configurazione_teorica, t.data_configurazione_effettiva = s.data_configurazione_effettiva WHEN NOT MATCHED THEN INSERT (id_richiesta, aom_terze_parti, data_configurazione_teorica, data_configurazione_effettiva) VALUES (s.id_richiesta, s.aom_terze_parti, s.data_configurazione_teorica, s.data_configurazione_effettiva); COMMIT; ELSE cod_errore := 1; END IF; ELSE cod_errore := 1; END IF; EXCEPTION WHEN OTHERS THEN cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in UPDATE_REC_DELTA ' || SQLERRM); RETURN; END; /