CREATE OR REPLACE PROCEDURE UPDATE_DONOR_DELTA ( mese_in IN NUMBER, anno_in IN NUMBER, cod_errore IN OUT NUMBER ) IS -- Purpose: Inserimento dei dati aggiornati al mese di riferimento nella -- tabella mnp_dw_donor_delta -- -- MODIFICATION HISTORY -- Person Date Comments -- L.Marcucci 16/08/2004 ------------------------------------------- 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); 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_donor_delta; COMMIT; -- Inserimento di tutte le richieste donor standard -- che ancora non hanno raggiunto uno stato finale o lo hanno raggiunto nel -- mese di riferimento INSERT INTO dwh.mnp_dw_donor_delta (id_richiesta, aom_recipient, msisdn, tipo_linea, codice_fiscale_partita_iva, data_ricezione_richiesta, data_validazione_max, data_cut_over_calc, presaincarico_ko, marcaggio) SELECT gr.id_richiesta, gr.codice_operatore_recipient, gr.msisdn, gr.tipo_cliente, gr.codice_fiscale_partita_iva, gr.dataricezionerichiesta, gr.data_validazione_max, gr.data_cut_over_calc, DECODE (gr.cod_controllo_presaincarico, -1, 1, 6, 0, 1), marcaggio FROM mnp.mnp_gestione_richiesta gr WHERE gr.richiestaadhoc = '0' AND gr.richiestaadhocaom = '0' 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; -- aggiornamento del campo marcaggio delle richieste consumenr con il valore 'C' UPDATE dwh.mnp_dw_donor_delta dw SET marcaggio = 'C' WHERE dw.tipo_linea = 'CO'; COMMIT; -- aggiornamento dei campi non presenti nella tabella di gestione richiesta dwh.update_donor_delta_2 (ultimo_giorno_mese, errore); IF errore = 0 THEN -- merge della tabella mnp_dw_donor_delta nella tabella mnp_dw_donor MERGE INTO dwh.mnp_dw_donor t USING dwh.mnp_dw_donor_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.tipo_linea = s.tipo_linea, t.marcaggio = s.marcaggio, t.codice_fiscale_partita_iva = s.codice_fiscale_partita_iva, t.data_ricezione_richiesta = s.data_ricezione_richiesta, t.data_presa_in_carico = s.data_presa_in_carico, t.data_invio_ai_sistemi_commer = s.data_invio_ai_sistemi_commer, t.data_validazione_max = s.data_validazione_max, t.data_validazione = s.data_validazione, t.data_ricezione_da_ccrmbit = s.data_ricezione_da_ccrmbit, t.data_cut_over_calc = s.data_cut_over_calc, t.data_cut_over_eff = s.data_cut_over_eff, t.causale_rifiuto = s.causale_rifiuto, t.data_espletamento = s.data_espletamento, t.stato = s.stato, t.data_stato_finale = s.data_stato_finale, t.presaincarico_ko = s.presaincarico_ko WHEN NOT MATCHED THEN INSERT (id_richiesta, aom_recipient, msisdn, tipo_linea, marcaggio, codice_fiscale_partita_iva, data_ricezione_richiesta, data_presa_in_carico, data_invio_ai_sistemi_commer, data_validazione_max, data_validazione, data_ricezione_da_ccrmbit, data_cut_over_calc, data_cut_over_eff, causale_rifiuto, data_espletamento, stato, data_stato_finale, presaincarico_ko) VALUES (s.id_richiesta, s.aom_recipient, s.msisdn, s.tipo_linea, s.marcaggio, s.codice_fiscale_partita_iva, s.data_ricezione_richiesta, s.data_presa_in_carico, s.data_invio_ai_sistemi_commer, s.data_validazione_max, s.data_validazione, s.data_ricezione_da_ccrmbit, s.data_cut_over_calc, s.data_cut_over_eff, s.causale_rifiuto, s.data_espletamento, s.stato, s.data_stato_finale, s.presaincarico_ko); COMMIT; ELSE cod_errore := 1; END IF; EXCEPTION WHEN OTHERS THEN cod_errore := 1; DBMS_OUTPUT.put_line ('Errore in UPDATE_DONOR_DELTA ' || SQLERRM); RETURN; END; -- Procedure /