CREATE OR REPLACE PROCEDURE calcola_sxmlin ( nomeindicatore IN VARCHAR2, starthour IN NUMBER, endhour IN NUMBER, frequenza IN VARCHAR2, nomefile IN VARCHAR2, partizione IN VARCHAR2, hostaria IN VARCHAR2 ) IS data_val DATE; file1 UTL_FILE.file_type; TYPE rec_valore_type IS RECORD ( desc_olo mnp_olo.desc_olo%TYPE, tipo_processo_descr mnp_lov.descr%TYPE, tipo_file_descr mnp_lov.descr%TYPE, valore NUMBER ); TYPE cur_valore_type IS REF CURSOR; cur_valore cur_valore_type; rec_valore rec_valore_type; sql_stmt VARCHAR2 (2000); BEGIN sql_stmt := ' SELECT e.desc_olo, e.tipo_processo_descr, e.tipo_file_descr,' || ' COUNT (nome_file) valore' || ' FROM mnp_xml_in PARTITION (' || partizione || ') a,' || ' (SELECT b.NAME tipo_processo, b.descr tipo_processo_descr,' || ' c.NAME tipo_file, c.descr tipo_file_descr, d.desc_olo' || ' FROM mnp_lov b, mnp_lov c, mnp_olo d, mnp_lov_ref f' || ' WHERE d.flag_terze_parti = 1' || ' AND b.lov_name = ''PROCESS''' || ' AND c.lov_name = ''XML_FILE_TYPE''' || ' AND c.lov_id = f.lov_id' || ' AND f.lov_id_ref = b.lov_id' || ' AND c.NAME != ''K'') e' || ' WHERE TRUNC (SYSDATE) + :starthour / 24 < a.data_eff(+)' || ' AND TRUNC (SYSDATE) + :endhour / 24 >= a.data_eff(+)' || ' AND e.desc_olo = a.mittente(+)' || ' AND e.tipo_file = a.tipo_file(+)' || ' GROUP BY e.desc_olo, e.tipo_processo_descr, e.tipo_file_descr'; DBMS_OUTPUT.put_line ( 'apro il file ' || 'MNP' || '.' || TO_CHAR (SYSDATE, 'yyyyMMdd') ); file1 := UTL_FILE.fopen (nomefile, 'MNP' || '.' || TO_CHAR (SYSDATE, 'yyyyMMdd'), 'a' ); OPEN cur_valore FOR sql_stmt USING starthour, endhour; data_val := SYSDATE; LOOP FETCH cur_valore INTO rec_valore; EXIT WHEN cur_valore%NOTFOUND; -- process record UTL_FILE.put_line (file1, nomeindicatore || ';' || rec_valore.desc_olo || '-:-' || rec_valore.tipo_processo_descr || '-:-' || rec_valore.tipo_file_descr || ';' || rec_valore.valore || ';' || frequenza || ';' || hostaria || ';' || TO_CHAR (data_val, 'yyyymmdd') || ';' || TO_CHAR (data_val, 'hh24:mi:ss') || ';' || TO_CHAR (SYSDATE, 'yyyymmdd') || ';' || TO_CHAR (SYSDATE, 'hh24:mi:ss') || ';' || '0' || ';' || rec_valore.desc_olo || '-:-' || rec_valore.tipo_processo_descr || '-:-' || rec_valore.tipo_file_descr || ';;' ); END LOOP; CLOSE cur_valore; UTL_FILE.fflush (file1); UTL_FILE.fclose (file1); DBMS_OUTPUT.put_line ( 'chiudo il file ' || 'MNP' || '.' || TO_CHAR (SYSDATE, 'yyyyMMdd') ); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line (SQLERRM); END; /