CREATE OR REPLACE PROCEDURE "CALCOLO_SIM_PRJHOC" (dataRif IN DATE ) AS -- PURPOSE: Aggiorna la tabella MNP_DW_SLA_3GG_OUT -- valorizzando il numero delle SIM per i progetti ad HOC. -- Elabora i record che hanno come mese di competenza -- il mese precedente a dataRif. -- -- -- MODIFICATION HISTORY -- Person Date Comments -- Letizia MOnosilio 04/11/2010 Creazione script --------------------------------------- num_sim NUMBER :=0; memo_richiesta VARCHAR2(23); memo_gruppo VARCHAR2(12); n_rec INTEGER := 0; CURSOR record_sim_rec IS SELECT ric.codice_gruppo codiceGruppo, sla.ID_RICHIESTA idRichiesta FROM dwh.mnp_dw_sla_3gg_out sla, mnp.mnp_gestione_richiesta_rec ric WHERE sla.id_richiesta=ric.id_richiesta AND sla.mese_comp_finale = TO_CHAR ( Last_Day(ADD_MONTHS(dataRif,-2))+1, 'MM/YYYY') AND sla.processo ='R' AND sla.flag_calcolo_numsim = 1 ORDER BY ric.codice_gruppo, sla.ID_RICHIESTA; CURSOR record_sim_don IS SELECT ric.codice_gruppo codiceGruppo, sla.ID_RICHIESTA idRichiesta FROM dwh.mnp_dw_sla_3gg_out sla, mnp.mnp_gestione_richiesta ric WHERE sla.id_richiesta=ric.id_richiesta AND sla.mese_comp_finale = TO_CHAR ( Last_Day(ADD_MONTHS(dataRif,-2))+1, 'MM/YYYY') AND sla.processo ='D' AND sla.flag_calcolo_numsim = 1 ORDER BY ric.codice_gruppo, sla.ID_RICHIESTA; BEGIN DBMS_OUTPUT.put_line ('CALCOLO_SIM_PRJHOC: INIZIO PROCEDURA calcolo SIM Recipient- '||TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS')); DBMS_OUTPUT.put_line('Periodo di competenza = '|| TO_CHAR ( Last_Day(ADD_MONTHS(dataRif,-2))+1, 'MM/YYYY')); memo_richiesta:=null; memo_gruppo := null; FOR rec IN record_sim_rec LOOP n_rec := n_rec +1; BEGIN IF (memo_richiesta is null) OR (memo_richiesta <> rec.idRichiesta) THEN BEGIN memo_richiesta:= rec.idRichiesta; IF (memo_gruppo is null) OR (memo_gruppo <> rec.codiceGruppo) THEN BEGIN memo_gruppo:= rec.codiceGruppo; SELECT COUNT(*) INTO num_sim FROM mnp.mnp_gestione_richiesta_rec ric WHERE ric.CODICE_GRUPPO=rec.codiceGruppo; END; END IF; UPDATE dwh.mnp_dw_sla_3gg_out SET numero_sim = num_sim WHERE mese_comp_finale = TO_CHAR ( Last_Day(ADD_MONTHS(dataRif,-2))+1, 'MM/YYYY') AND id_richiesta = rec.idRichiesta; END; END IF; END; END LOOP; DBMS_OUTPUT.put_line ('CALCOLO_SIM_PRJHOC: terminato calcolo SIM Recipient'); FOR rec IN record_sim_don LOOP n_rec := n_rec +1; BEGIN IF (memo_richiesta is null) OR (memo_richiesta <> rec.idRichiesta) THEN BEGIN memo_richiesta:= rec.idRichiesta; IF (memo_gruppo is null) OR (memo_gruppo <> rec.codiceGruppo) THEN BEGIN memo_gruppo:= rec.codiceGruppo; SELECT COUNT(*) INTO num_sim FROM mnp.mnp_gestione_richiesta ric WHERE ric.CODICE_GRUPPO=rec.codiceGruppo; END; END IF; UPDATE dwh.mnp_dw_sla_3gg_out SET numero_sim = num_sim WHERE mese_comp_finale = TO_CHAR ( Last_Day(ADD_MONTHS(dataRif,-2))+1, 'MM/YYYY') AND id_richiesta = rec.idRichiesta; END; END IF; END; END LOOP; DBMS_OUTPUT.put_line ('CALCOLO_SIM_PRJHOC: terminato calcolo SIM Donor'); COMMIT; DBMS_OUTPUT.put_line ('PCALCOLO_SIM_PRJHOC: FINE PROCEDURA - '||TO_CHAR(sysdate,'YYYY-MM-DD HH24:MI:SS')||' - RECORDS TRATTATI: '||N_REC); EXCEPTION WHEN OTHERS THEN if record_sim_rec%ISOPEN then CLOSE record_sim_rec; end if; if record_sim_don%ISOPEN then CLOSE record_sim_don; end if; DBMS_OUTPUT.put_line ('Errore in CALCOLO_SIM_PRJHOC ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')); RETURN; END calcolo_sim_prjhoc; /