2016-12-30 2 views
1

크기가 1,699KB 인 xlsx 파일 sample.xlsx이 원격 디렉토리에 저장되어 있습니다. gzipzip으로 그들을 압축하는 두 가지 인기있는 PL/SQL 패키지 (UTL_COMPRESSAS_ZIP)를 재 시도했습니다. AS_ZIP를 이용하여 아래의 코드 PL/SQL을 사용하는 파일 압축 용 패키지가 더 좋습니까?

, 난 1,619킬로바이트에 압축 파일을 가지고 UTL_COMPRESS 사용 (일본어 post 찍은) 아래 코드

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; 

, I는 1천6백18킬로바이트에 압축 파일을 가지고

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 사용자 정의를 사용하여 보이지 않는 장점이 있다면 오라클이 UTL_COMPRESS을 제공했는지 궁금합니다.

감사합니다.

+0

훨씬 간단 감사합니다 @ APC! 나는 그것을 대답으로 받아 들였을 것이다. 둘 중 어느 쪽을 추천 하시겠습니까? –

+1

'xslx'는 이미 압축 형식입니다. – Vadzim

답변

5

Anton Scheffer가 왜 AS_ZIP 패키지 in this blog post을 작성했는지 설명합니다. 귀하의 질문에 대답해야합니다. 기본적으로 추가 zip 형식을 지원합니다.

또한 게시물의 링크보다 최신 버전의 패키지에 대한 링크가 있습니다.

내 표준 라인은 타사 오퍼링에서 추가로 필요한 것이 필요하지 않으면 오라클 내장 기능을 항상 사용합니다. 오라클의 표준 기능을 사용

의미 :

  • 오라클 지원은 우리가 코드를 유지하지 않아도 우리에게
  • 을 포함
  • 우리의 코드베이스는 그 새로운 참가자