UTL_FILE 包的使用详解
结果为:

结果为:
?
功能:此procedure复制一个文件的连续部分内容或者全部内容到一个新创建的文件。如果参数start_line和end_line省略的话,默认地会复制整个文件。此操作会将源文件以read模式打开,将目标文件以write模式打开。
语法:
UTL_FILE.FCOPY ( src_location??? IN VARCHAR2,
src_filename? IN VARCHAR2,
dest_location? IN VARCHAR2,
dest_filename IN VARCHAR2,
start_line???????? IN BINARY_INTEGER DEFAULT 1,
end_line????????? IN BINARY_INTEGER DEFAULT NULL);
?
参数:src_location来源文件的目录名。取值来源是视图ALL_DIRECTORIES的DIRECTORY_NAME;
???????????? src_filename? 将要被复制的来源文件
???????????? dest_location 被创建的目标文件存放的目录名。
??? dest_filename 从来源文件创建的目标文件。
??? start_line? 要复制的内容起始行号,默认为1,表示从第一行开始复制。
??? end_line 要复制的内容的终止行号,默认NULL,表示文件的末尾。
?
测试程序之前:
测试代码:
测试程序之后:
并且l001-copy.log文件中的内容只有两行:
?
描述:FFLUSH强制将缓冲的数据写入文件。因为通常待写入文件的数据都是都在缓冲存储位置。当有必要去read一个任然处于打开状态的文件时,FFLUSH就起作用了,例如在调试程序中,可以将调试的消息及时冲到文件中,已便于我们马上就能read这些内容。
语法:
UTL_FILE.FFLUSH (file IN FILE_TYPE);
??
描述:FGETATTR读取磁盘上的文件并返回文件的属性。
语法:UTL_FILE.FGETATTR( location IN VARCHAR2,
filename IN VARCHAR2,
fexists OUT BOOLEAN,
file_length OUT NUMBER,
block_size OUT BINARY_INTEGER);
?? 参数:location 此处略去X个字。
????? filename此处略去X个字。
????? fexists 返回的属性1:文件是否存在
????? file_length 返回的属性2:文件字节长度,如果文件不存在,则返回NULL。
????? block_size? 文件系统块的字节大小。
?
测试:
?
DECLARE l_loc all_directories.directory_name%TYPE := 'CUX_LOG_DIR'; l_file utl_file.file_type; l_file_exsits BOOLEAN; l_file_length NUMBER; l_block_size BINARY_INTEGER; l_buffer VARCHAR2(32767); --data CURSOR c_hander IS SELECT fu.user_name, fu.description FROM fnd_user fu WHERE 1 = 1 AND fu.user_name LIKE 'XXX%' ORDER BY fu.user_name;?BEGIN utl_file.fgetattr(location => l_loc, filename => 'test.log', fexists => l_file_exsits, file_length => l_file_length, block_size => l_block_size); --put IF l_file_exsits THEN l_file := utl_file.fopen(location => l_loc, filename => 'test.log', open_mode => 'w'); l_buffer := 'begining of file....'; utl_file.put_line(file => l_file, buffer => l_buffer); FOR l IN c_hander LOOP l_buffer := l.user_name || chr(9) || nvl(l.description, 'no description'); utl_file.put_line(file => l_file, buffer => l_buffer); END LOOP; l_buffer := 'end of file....'; utl_file.put_line(file => l_file, buffer => l_buffer); --flush utl_file.fflush(file => l_file); --get l_file := utl_file.fopen(location => l_loc, filename => 'test.log', open_mode => 'r'); utl_file.fgetattr(location => l_loc, filename => 'test.log', fexists => l_file_exsits, file_length => l_file_length, block_size => l_block_size); LOOP utl_file.get_line(file => l_file, buffer => l_buffer, len => 32767); dbms_output.put_line(a => l_buffer); EXIT WHEN utl_file.fgetpos(file => l_file) = l_file_length; END LOOP; END IF; utl_file.fclose_all;END;
?
?