Files
2024-05-13 12:54:14 +02:00

123 lines
3.9 KiB
SQL

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;
/