2016-12-30 17 views
1

У меня есть файл xlsx sample.xlsx, хранящийся в удаленном каталоге размером около 1,699 КБ. Я пробовал два популярных PL/SQL-пакета (UTL_COMPRESS и AS_ZIP), которые сжимают их в gzip и zip, соответственно.Улучшенный пакет для сжатия файлов с использованием PL/SQL?

С кодом ниже с помощью AS_ZIP, я сжат файл 1,619 КБ:

declare 
    g_zipped_blob blob; 
    l_file_name varchar2(100) := 'sample.xlsx'; 
    l_directory varchar2(100) := 'EXT_TAB_DATA'; 
begin 
    as_zip.add1file(g_zipped_blob, l_file_name, as_zip.file2blob(l_directory, l_file_name)); 
    as_zip.finish_zip(g_zipped_blob); 
    as_zip.save_zip(g_zipped_blob, l_directory, 'my2.zip'); 
    dbms_lob.freetemporary(g_zipped_blob); 
end; 

С ниже код (взято из оригинального post) с помощью UTL_COMPRESS, я сжат файл 1,618 КБ:

DECLARE 
    in_filename VARCHAR2(100) := 'sample.xlsx'; 
    l_directory varchar2(100) := 'EXT_TAB_DATA'; 
    src_file BFILE; 
    v_content BLOB; 
    v_blob_len INTEGER; 
    v_file  utl_file.file_type; 
    v_buffer RAW(32767); 
    v_amount BINARY_INTEGER := 32767; 
    v_pos  INTEGER := 1; 
BEGIN 
    src_file := bfilename(l_directory, in_filename); 
    dbms_lob.fileopen(src_file, dbms_lob.file_readonly); 
    v_content := utl_compress.lz_compress(src_file, 9); 
    v_blob_len := dbms_lob.getlength(v_content); 
    v_file  := utl_file.fopen(l_directory, 
           in_filename || '.gz', 
           'wb'); 
    WHILE v_pos < v_blob_len LOOP 
     dbms_lob.READ(v_content, v_amount, v_pos, v_buffer); 
     utl_file.put_raw(v_file, v_buffer, TRUE); 
     v_pos := v_pos + v_amount; 
    END LOOP; 
    utl_file.fclose(v_file); 

EXCEPTION 
    WHEN OTHERS THEN 
     IF utl_file.is_open(v_file) THEN 
     utl_file.fclose(v_file); 
     END IF; 
     RAISE; 
END; 

Хотя минимальный, кажется, что UTL_COMPRESS имеет лучшее сжатие с точки зрения размера файла. Мне было интересно, было ли какое-то невидимое преимущество, используя пользовательский AS_ZIP через поставляемый Oracle UTL_COMPRESS?

спасибо.

+0

спасибо @APC! Я бы принял это как ответ. какой из двух вы бы порекомендовали? –

+1

Обратите внимание, что 'xslx' уже имеет формат zip. – Vadzim

ответ

5

Антон Схеффер объясняет, почему он написал пакет AS_ZIP in this blog post. Он должен ответить на ваш вопрос. В основном это поддержка дополнительных форматов zip.

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

Что касается используемой мной стандартной строки, всегда использовать встроенную функциональность Oracle, если нам действительно не нужно что-то дополнительное от стороннего предложения.

Используя стандартную функциональность Oracle означает:

  • поддержки Oracle охватывает нас
  • мы не должны поддерживать код
  • наш базовый код, что гораздо проще для новых столяров

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

  • Нет связанных вопросов^_^