크기가 1,699KB 인 xlsx 파일 sample.xlsx
이 원격 디렉토리에 저장되어 있습니다. gzip
및 zip
으로 그들을 압축하는 두 가지 인기있는 PL/SQL 패키지 (UTL_COMPRESS 및 AS_ZIP)를 재 시도했습니다. AS_ZIP
를 이용하여 아래의 코드 PL/SQL을 사용하는 파일 압축 용 패키지가 더 좋습니까?
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
을 제공했는지 궁금합니다.
감사합니다.
훨씬 간단 감사합니다 @ APC! 나는 그것을 대답으로 받아 들였을 것이다. 둘 중 어느 쪽을 추천 하시겠습니까? –
'xslx'는 이미 압축 형식입니다. – Vadzim