gpt4 book ai didi

oracle11g - 如何使用 UTL_COMPRESS 包压缩 txt 文件并在 unix 中使用 oracle 11 g 创建 gz 文件?

转载 作者:行者123 更新时间:2023-12-04 21:14:45 26 4
gpt4 key购买 nike

我有以下要求:
实际上我有 txt 文件我需要压缩这个文件并使用 oracle UTL_COMPRESS 包创建 gz 文件。
我需要在带有 Oracle 11g 的 Unix 机器上实现这个功能。
我已经用下面的代码尝试过它,它在某种程度上工作。我的意思是它正在压缩小文件。

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;

但是这段代码不能压缩大文件。
如果有人在 oracle 11g 中实现了这个功能,请帮忙。
将不胜感激。
错误信息:
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;

关于oracle11g - 如何使用 UTL_COMPRESS 包压缩 txt 文件并在 unix 中使用 oracle 11 g 创建 gz 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26772666/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com