读书人

UTL_FILE 包的应用详解

发布时间: 2013-07-16 22:38:04 作者: rapoo

UTL_FILE 包的使用详解

结果为:
UTL_FILE 包的应用详解


UTL_FILE 包的应用详解

结果为:
UTL_FILE 包的应用详解
?

  1. FCOPY

功能:此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,表示文件的末尾。

?

测试程序之前:
UTL_FILE 包的应用详解

测试代码:
UTL_FILE 包的应用详解

测试程序之后:
UTL_FILE 包的应用详解

并且l001-copy.log文件中的内容只有两行:
UTL_FILE 包的应用详解
?

  1. FFLUSH

描述:FFLUSH强制将缓冲的数据写入文件。因为通常待写入文件的数据都是都在缓冲存储位置。当有必要去read一个任然处于打开状态的文件时,FFLUSH就起作用了,例如在调试程序中,可以将调试的消息及时冲到文件中,已便于我们马上就能read这些内容。

语法:

UTL_FILE.FFLUSH (file IN FILE_TYPE);

??

  1. FGETATTR

描述: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;

?

?

读书人网 >编程

热点推荐