SET serveroutput on DECLARE rs1 VARCHAR2 (255); rs2 VARCHAR2 (255); operatore VARCHAR2 (15); operatore_res VARCHAR2 (15); operatore_ VARCHAR2 (15); dir_out VARCHAR2 (255); num NUMBER (15, 0); totale NUMBER (15, 0); cod_ope VARCHAR2 (15); cod VARCHAR2 (4); file1 UTL_FILE.file_type; data_inizio DATE; data_fine DATE; DATA DATE; di DATE; p VARCHAR2 (15) := '&1'; cod_olo NUMBER (5); --cursore degli operatori CURSOR cur_operatori IS SELECT desc_olo, cod_olo FROM mnp_olo_report WHERE flag_attivo = 1 AND desc_olo NOT IN ('TIMT', 'TIMG') ORDER BY desc_olo; --Numero di attivazioni non effettuate da un operatore in qualita di terza parte CURSOR cur_res ( data_inizio DATE, data_fine DATE, cod_olo NUMBER, operatore VARCHAR2 ) IS SELECT olo.desc_olo, NVL (SUM (x.num), 0) FROM mnp_olo_report olo, (SELECT COUNT (r.id_richiesta) num, codice_operatore_donating cod FROM mnp_gestione_richiesta_rec r WHERE r.data_cut_over_calc >= TRUNC (data_inizio) AND r.data_cut_over_calc <= TRUNC (data_fine) AND r.espletamentoterzeparti LIKE '%' || cod_olo || '%' AND r.codice_operatore_donating != operatore AND r.codice_operatore_donating = 'TIMT' AND r.stato IN (8, 10, 11) GROUP BY codice_operatore_donating UNION ALL SELECT COUNT (r.id_richiesta) num, codice_operatore_donating cod FROM mnp_gestione_richiesta_rec r WHERE r.data_cut_over_aom >= TRUNC (data_inizio) AND r.data_cut_over_aom <= TRUNC (data_fine) AND r.espletamentoterzeparti LIKE '%' || cod_olo || '%' AND r.codice_operatore_donating != operatore AND r.codice_operatore_donating != 'TIMT' AND r.stato IN (8, 10, 11) GROUP BY codice_operatore_donating UNION ALL SELECT COUNT (r.id_richiesta) num, codice_operatore_donating cod FROM mnp_gestione_richiesta_rec r WHERE r.data_cut_over_calc >= TRUNC (data_inizio) AND r.data_cut_over_calc <= TRUNC (data_fine) AND r.codice_operatore_donating != operatore AND r.codice_operatore_donating = 'TIMT' AND r.stato IN (8, 10, 11, 12) AND EXISTS ( SELECT xri.id_richiesta FROM mnp_xml_in xi, mnp_xml_richiesta_in xri WHERE xi.tipo_file = 6 AND xi.mittente = operatore AND xi.nome_file = xri.nome_file AND xri.id_richiesta = r.id_richiesta AND xri.richiestaxml LIKE '%4%' AND TRUNC (xi.data_eff) > r.data_cut_over_calc MINUS SELECT xri.id_richiesta FROM mnp_xml_in xi, mnp_xml_richiesta_in xri WHERE xi.tipo_file = 6 AND xi.mittente = operatore AND xi.nome_file = xri.nome_file AND xri.id_richiesta = r.id_richiesta AND xri.richiestaxml LIKE '%4%' AND TRUNC (xi.data_eff) <= r.data_cut_over_calc) GROUP BY codice_operatore_donating UNION ALL SELECT COUNT (r.id_richiesta) num, codice_operatore_donating cod FROM mnp_gestione_richiesta_rec r WHERE r.data_cut_over_aom >= TRUNC (data_inizio) AND r.data_cut_over_aom <= TRUNC (data_fine) AND r.codice_operatore_donating != operatore AND r.codice_operatore_donating != 'TIMT' AND r.stato IN (8, 10, 11, 12) AND EXISTS ( SELECT xri.id_richiesta FROM mnp_xml_in xi, mnp_xml_richiesta_in xri WHERE xi.tipo_file = 6 AND xi.mittente = operatore AND xi.nome_file = xri.nome_file AND xri.id_richiesta = r.id_richiesta AND xri.richiestaxml LIKE '%4%' AND TRUNC (xi.data_eff) > r.data_cut_over_aom MINUS SELECT xri.id_richiesta FROM mnp_xml_in xi, mnp_xml_richiesta_in xri WHERE xi.tipo_file = 6 AND xi.mittente = operatore AND xi.nome_file = xri.nome_file AND xri.id_richiesta = r.id_richiesta AND xri.richiestaxml LIKE '%4%' AND TRUNC (xi.data_eff) <= r.data_cut_over_aom) GROUP BY codice_operatore_donating) x WHERE olo.flag_attivo = 1 AND olo.desc_olo = x.cod(+) GROUP BY olo.desc_olo ORDER BY desc_olo; --INIZIO BEGIN IF (p <> 'nullo') THEN data_inizio := TO_DATE ('&1', 'dd/mm/yyyy'); data_fine := TO_DATE ('&2', 'dd/mm/yyyy'); dir_out := '&3'; ELSE IF (TO_CHAR (SYSDATE, 'DD') <= '15') THEN DATA := ADD_MONTHS ((TRUNC (SYSDATE)), -1); data_inizio := TO_DATE ('16/' || TO_CHAR (TRUNC (DATA), 'mm/yyyy'), 'dd/mm/yyyy'); data_fine := LAST_DAY (TRUNC (DATA)); ELSE data_inizio := TO_DATE ('01/' || TO_CHAR (TRUNC (SYSDATE), 'mm/yyyy'), 'dd/mm/yyyy' ); data_fine := TO_DATE ('15/' || TO_CHAR (TRUNC (SYSDATE), 'mm/yyyy'), 'dd/mm/yyyy' ); END IF; SELECT donor_out INTO dir_out FROM mnp_olo_report WHERE desc_olo = 'MONIT'; END IF; BEGIN OPEN cur_operatori; LOOP FETCH cur_operatori INTO operatore, cod_olo; EXIT WHEN cur_operatori%NOTFOUND; totale := 0; file1 := UTL_FILE.fopen (dir_out, 'TIMG_to_' || UPPER (operatore) || '_AttivazioneNonEffet_' || TO_CHAR (SYSDATE, 'yyyyMMdd') || '.csv', 'w' ); UTL_FILE.put_line (file1, 'Numero di attivazioni non effettuate da ' || UPPER (operatore) || ' in qualità di operatore terza parte il giorno di cut_over previsto' ); UTL_FILE.put_line (file1, ' '); UTL_FILE.put_line (file1, 'Periodo dal ' || TRUNC (data_inizio) || ' al ' || TRUNC (data_fine) ); UTL_FILE.put_line (file1, ' '); UTL_FILE.put_line (file1, 'Operatore OLO terza Parte: ' || UPPER (operatore) ); UTL_FILE.put_line (file1, ' '); UTL_FILE.put_line (file1, ';TIMG '); OPEN cur_res (data_inizio, data_fine, cod_olo, operatore); LOOP FETCH cur_res INTO operatore_, num; EXIT WHEN cur_res%NOTFOUND; UTL_FILE.put_line (file1, operatore_ || ';' || num); totale := totale + num; END LOOP; CLOSE cur_res; UTL_FILE.put_line (file1, 'Totale' || ';' || totale); END LOOP; UTL_FILE.fflush (file1); UTL_FILE.fclose (file1); CLOSE cur_operatori; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line (SQLERRM); END; END; / EXIT;