ejemplo descripciones oracle plsql utl-file

oracle - ejemplo de meta descripciones



Escribir contenidos en UTL_FILE inmediatamente después de una única iteración (1)

Tengo PL / SQL Block, consulta desde una función de tabla y uso un cursor para procesarlo, registro por registro, tengo un poco de lógica de negocios y finalmente escribo los registros calificados en el archivo.

El número de registros a procesar es de hasta 1 millón. Y la velocidad de procesamiento total es de aproximadamente 10000 registros por minuto. (Después de probar con pocos fragmentos de datos)

Ahora, necesito indicar el estado del procesamiento en un entorno diferente, JSP.

DECLARE vSFile utl_file.file_type; vNewLine VARCHAR2(200); my_cursor IS SELECT * FROM MYTABLE; my_details my_cursor%rowtype; BEGIN vSFile := utl_file.fopen(''ORALOAD'', file_name,''r''); IF utl_file.is_open(vSFile) THEN utl_file.get_line(vSFile, vNewLine); OPEN my_cursor; LOOP FETCH my_cursor INTO my_details; EXIT WHEN sll_cur%NOTFOUND; -- Do processing utl_file.putf(logfile,''%s '',my_details); -- A info tht record completed! END LOOP; CLOSE logfile; CLOSE my_cursor; END IF; EXCEPTION WHEN OTHERS THEN --Error handling END; /

La información de registro escrita aquí, no está disponible hasta la finalización del proceso. Por lo tanto, no puedo rastrear, hasta qué punto se completa. ¿Puede alguien ayudarme en esto?


Para escribir datos en el archivo, debe usar el procedimiento FFLUSH. Por ejemplo:

OPEN my_cursor; LOOP FETCH my_cursor INTO my_details; EXIT WHEN sll_cur%NOTFOUND; -- Do processing utl_file.putf(logfile,''%s '',my_details); -- Call the FFLUSH proc here..And contents are available immediately. utl_file.FFLUSH(logfile); END LOOP;

De la documentación:

FFLUSH escribe físicamente datos pendientes en el archivo identificado por el identificador de archivo. Normalmente, los datos que se escriben en un archivo se almacenan en el búfer. El procedimiento FFLUSH obliga a escribir los datos almacenados en el archivo. Los datos deben terminarse con un carácter de nueva línea.

El enjuague es útil cuando el archivo debe leerse mientras está abierto. Por ejemplo, los mensajes de depuración se pueden descargar al archivo para que puedan leerse inmediatamente.

Hay más información sobre UTL_FILE en los documentos de Oracle .