oracle11g – 如何使用UTL_COMPRESS包压缩txt文件并使用oracle 1
发布时间:2020-12-12 13:14:43 所属栏目:百科 来源:网络整理
导读:我有以下要求: 实际上我有txt文件我需要压缩这个文件并使用oracle UTL_COMPRESS包创建gz文件. 我需要在Unix 11b上使用Oracle 11g实现此功能. 我已经尝试使用下面的代码,它在某种程度上工作.我的意思是它正在努力压缩小尺寸文件. DECLARE f utl_file.file_ty
|
我有以下要求:
实际上我有txt文件我需要压缩这个文件并使用oracle UTL_COMPRESS包创建gz文件. 我需要在Unix 11b上使用Oracle 11g实现此功能. 我已经尝试使用下面的代码,它在某种程度上工作.我的意思是它正在努力压缩小尺寸文件. DECLARE
f utl_file.file_type;
compressed BLOB;
data_b BFILE;
BEGIN
f := UTL_FILE.fopen ('DIR_UTL_COM_TEST','Test1.gz','wb');
data_b := BFILENAME ('DIR_UTL_COM_TEST','pk_intibuy_pkb.txt');
DBMS_LOB.FILEOPEN (data_b,DBMS_LOB.LOB_READONLY);
DBMS_LOB.createtemporary (compressed,false);
compressed := UTL_COMPRESS.lz_compress (data_b,6);
UTL_FILE.put_raw(f,compressed,true);
UTL_FILE.fclose (f);
DBMS_LOB.FILECLOSE (data_b);
DBMS_LOB.freetemporary (compressed);
END;
但是这段代码无法压缩大文件. Error report: ORA-06502: PL/SQL: numeric or value error ORA-06512: at line 11 06502. 00000 - "PL/SQL: numeric or value error%s" 解决方法我能够解决问题.我修改了代码,下面的代码也适用于压缩大型文件.DECLARE
in_filename VARCHAR2(100);
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
in_filename := 'Test.txt';
src_file := bfilename('DIR_UTL_COM_TEST',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('DIR_UTL_COM_TEST',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;
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
