2016-12-30 70 views
1

xlsxファイルsample.xlsxは、サイズが約1,699 KBのリモートディレクトリに保存されています。 gzipzipにそれらを圧縮する2つの一般的なPL/SQLパッケージ(UTL_COMPRESSAS_ZIP)を試しました。 AS_ZIPを使用して以下のコードでPL/SQLを使用したファイル圧縮のためのより良いパッケージ?

は、私が1619キロバイトにファイルを圧縮した: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; 

、私は1618キロバイトにファイルを圧縮しました。

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

のためにそのはるかに簡単ですコード

  • を維持する必要はありません:Oracleの標準機能には手段を用いて

    ありがとう@APC!私は答えとしてそれを受け入れるだろう。どちらをお勧めしますか? –

  • +1

    'xslx'はすでにZIP形式です。 – Vadzim

    答えて

    5

    Anton SchefferがなぜAS_ZIPパッケージin this blog postを書いたのかを説明しています。あなたの質問に答えるはずです。基本的には、追加のzip形式をサポートすることです。

    また、記事のリンクよりも新しいバージョンのパッケージへのリンクがあります。

    私の標準的な行は、サードパーティ製品から特別なものが必要な場合を除いて、Oracleの組み込み機能を常に使用することです。

    • Oracleサポートが
    • たちをカバーし、我々は我々のコードベースは新しいジョイナ
    関連する問題