私はfseekを使用して、pirticular位置からデータを読み取るプログラムを作成する必要があります。 私は行ごとにデータを読み取る必要があり、pirticular行では、データを読み取るためにfseekを使用する必要があります。 しかし、私は、fseek関数とabsolute_offsetを使用しています(少し小さいファイルサイズ当時)大きいサイズであり、それはこのエラーにUtl_file fseek関数は大きな絶対オフセットでエラーを出しますか?
ORA-29284: file read error
ORA-06512: at "SYS.UTL_FILE", line 219
ORA-06512: at "SYS.UTL_FILE", line 1145
ORA-06512: at line 15"
を与えるが、4000レンジのような小さなabsolute_offset値が適切とピックデータを働くと。 行番号15ここで、fseekがエラーを出しています。
DECLARE
lv_utl UTL_FILE.FILE_TYPE;
v_buff VARCHAR2(2000);
l_exists boolean;
l_block VARCHAR2(2000);
l_file_length number;
v_line varchar2(5000);
BEGIN
UTL_FILE.fgetattr('/d04/data/edi/inbound','POO0001.dat',l_exists,l_file_length,l_block);
lv_utl := UTL_FILE.FOPEN('/d04/data/edi/inbound','POO0001.dat','R');
--utl_file.get_line(lv_utl,v_line,50);
--dbms_output.put_line(v_line);
--l_file_length:=length();
dbms_output.put_line(l_file_length);
utl_file.fseek(lv_utl,1261061);
utl_file.get_line(lv_utl,v_buff,100);
dbms_output.put_line(v_buff);
--lv_msg_txt := 'empno ename job manager hiredate commission salary department_no';
--UTL_FILE.PUT_LINE(lv_utl,lv_msg_txt);
--UTL_FILE.PUT_LINE(lv_utl,'------------------------------------------------------------------------------------');
--UTL_FILE.PUT_LINE(lv_utl,' ');
--UTL_FILE.FCLOSE(lv_utl);
END;
file_lengthが正確に返されますか(つまり、 "ls"出力と一致しますか?) –