CREATE OR REPLACE PROCEDURE calcola_sxmlou ( 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_out 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' || ' WHERE (d.flag_terze_parti = 1 OR d.desc_olo = ''NPTS'')' || ' AND b.lov_name = ''PROCESS''' || ' AND c.lov_name = ''XML_FILE_TYPE''' || ' AND ((d.flag_terze_parti = 1' || ' AND (b.NAME, c.NAME) IN' || ' ((''K'', ''7''),' || ' (''D'', ''2''),' || ' (''D'', ''5''),' || ' (''D'', ''6''),' || ' (''R'', ''1''),' || ' (''R'', ''3''),' || ' (''R'', ''9''),' || ' (''P'', ''6'')) ' || ' ) ' || ' OR (d.desc_olo = ''NPTS''' || ' AND (b.NAME, c.NAME) IN' || ' ((''K'', ''7''),' || ' (''D'', ''6''),' || ' (''R'', ''3''),' || ' (''R'', ''6''),' || ' (''P'', ''6'')) ' || ' )' || ' )) e ' || ' WHERE TRUNC (SYSDATE) + :starthour / 24 < a.data_invio(+)' || ' AND TRUNC (SYSDATE) + :endhour / 24 >= a.data_invio(+)' || ' AND e.desc_olo = a.destinatario(+)' || ' AND e.tipo_file = a.tipo_file(+)' || ' AND e.tipo_processo = a.tipo_processo(+)' || ' 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; 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; /