2014-02-06 2 views
0

У меня есть процедура, которая извлекает данные из EDW в файл для другого пользователя в используемых бизнес-объектах.Добавление к извлеченному файлу

Я использую курсор, чтобы выбрать данные, которые мне нужно, а затем запустить его в цикле следующим образом:

FOR x IN c_body LOOP 

utl_file.put_line(out_file, x.data_line); 
END LOOP; 

    utl_file.fclose(out_file); 
    DBMS_OUTPUT.PUT_LINE('copy file from ' ||lv_path||'/'||lv_filename|| ' to '        ||lv_pub_path||'/'||lv_filename); 
    OSUTIL.RUNOSCMD('cp -f '||lv_path||'/'||lv_filename||' '||lv_pub_path, lv_os_out, ln_os_num); 

    IF ln_os_num != 0 THEN 
    dbms_output.put_line('copy file '||lv_filename||' failed. error = ' || lv_os_out || ' ' || ln_os_num); 
    RAISE exit_now; 
    END IF; 

Есть ли способ, что я могу запустить процедуру несколько раз и просто добавить к извлеченный файл? В настоящее время я использую массивный экстракт из двухлетних данных истории и скорее буду добавлять несколько раз с меньшими наборами, а не использовать полные 24 месяца (это будет навсегда).

Спасибо за помощь заранее

+1

Вы имеете в виду файл, который вы пишете с помощью 'utl_file', или целевой файл, который вы «копировать это тоже в ОС? –

ответ

4

Вы можете добавить в файл с помощью UTL_FILE с дописывания режимом открытия fopen:

open_mode: Указывает, как файл открыт. Режимы включают в себя:

  • г - читать текст
  • ш - написать текст
  • а - добавить текст
  • Р.Б. - режим чтения байт
  • термометра - запись байт режима
  • AB - добавить байт О

В вашем случае вы также можете записать в 24 (разных) файла, чтобы одновременно запускать несколько процедур, а затем объединять файлы результатов.

1

Вы можете open the file in append mode вместо режима записи:

out_file := UTL_FILE.FOPEN('DIR', lv_filename, 'a'); 

Если вы хотите создать новый файл каждый раз, но добавить к целевому файлу вы копируете на то вы можете сделать это в OS Leve:

OSUTIL.RUNOSCMD('cat '||lv_path||'/'||lv_filename||' >> '||lv_pub_path, 
    lv_os_out, ln_os_num); 

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

Смежные вопросы