Запишите содержимое в UTL_FILE сразу после одной итерации

У меня есть блок PL/SQL, он запрашивает из функции таблицы, и я использую курсор для его обработки запись за записью, имею некоторую бизнес-логику и, наконец, записываю квалифицированные записи в файл.

Количество обрабатываемых записей — до 1 миллиона. А общая скорость обработки составляет примерно 10000 записей в минуту (после тестирования с несколькими фрагментами данных).

Теперь, когда мне нужно указать статус обработки в другой среде, 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;
/

Информация журнала, записанная здесь, недоступна до завершения процесса. Таким образом, я не могу отслеживать, насколько это завершено. Может ли кто-нибудь помочь мне в этом?


person user3169323    schedule 30.01.2014    source источник


Ответы (1)


Для записи данных в файл следует использовать процедуру FFLUSH. Например:

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;

Из документации:

FFLUSH физически записывает ожидающие данные в файл, указанный дескриптором файла. Обычно данные, записываемые в файл, буферизуются. Процедура FFLUSH принудительно записывает буферизованные данные в файл. Данные должны заканчиваться символом новой строки.

Сброс полезен, когда файл должен быть прочитан, пока он еще открыт. Например, отладочные сообщения можно сбросить в файл, чтобы их можно было сразу прочитать.

Дополнительную информацию о UTL_FILE можно найти в документах Oracle.

person Maheswaran Ravisankar    schedule 30.01.2014