xlsxファイルsample.xlsx
は、サイズが約1,699 KBのリモートディレクトリに保存されています。 gzip
とzip
にそれらを圧縮する2つの一般的なPL/SQLパッケージ(UTL_COMPRESSとAS_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
より目に見えない利点があるかどうか疑問に思っていましたか?
ありがとうございます。
のためにそのはるかに簡単ですコード
ありがとう@APC!私は答えとしてそれを受け入れるだろう。どちらをお勧めしますか? –
'xslx'はすでにZIP形式です。 – Vadzim