UTL_FILE包

UTL_FILE是一个标准的工具包,用来读写操作系统上的文件。

表1展示了UTL_FILE包的子程序。

子程序 说明
函数FOPEN 打开一个文件,用于读取或者写入数据,返回值是文件的句柄
过程FCLOSE 关闭文件
过程FFLUSH 把缓存的数据刷入物理磁盘
过程PUT 向文件写入数据
过程NEW_LINE 写入一个换行符
过程PUT_LINE 写入数据,同时写入换行符
过程FGETATTR 获取文件或磁盘的一些属性
过程FCLOSE_ALL 关闭当前会话的所有文件
过程FREMOVE 删除指定文件

示例:

创建目录作为文件的路径

declare
   va varchar2;
BEGIN
    select VALUE into va from v$parameter where NAME ='EXTERN_DATA_DIR_PATH';
    EXECUTE IMMEDIATE 'create directory mypath as '||''''||va||'''';
END ;
/

调用UTL_FILE中的函数和存储过程

CREATE OR REPLACE PROCEDURE file_JF_20150930_002_test()
AS
    p_seq       NUMBER(10) ;
    p_cur_seq   NUMBER(10) ;
    output_file utl_file.file_type ;
BEGIN
    output_file := utl_file.fopen ('MYPATH' , 'JF_20150930_002_test.txt' , 'w' , 512) ;
    utl_file.put (output_file , '123456') ;
    utl_file.put (output_file , '123456') ;
    utl_file.new_line (output_file) ;
    utl_file.put (output_file , '123456') ;
    utl_file.new_line (output_file) ;
    utl_file.put_line (output_file , '123456') ;
    utl_file.fflush (output_file) ;
    utl_file.fclose (output_file) ;
END;
/

EXEC file_JF_20150930_002_test();

获取文件属性

CREATE OR REPLACE PROCEDURE file_JF_20150930_002_test()
AS
    output_file utl_file.file_type ;
    fexists     BOOLEAN ;
    file_length NUMBER ;
    block_size  BINARY_INTEGER ;
BEGIN
    utl_file.fgetattr ('MYPATH' , 'JF_20150930_002_test.txt' , fexists , file_length , block_size) ;
    IF fexists THEN
        RAISE NOTICE '%,%' , file_length , block_size ;
    END IF;
END;
/

EXEC file_JF_20150930_002_test();

关闭会话中打开的所有文件句柄

CREATE OR REPLACE PROCEDURE file_JF_20150930_002_test
AS
    p_seq       NUMBER(10) ;
    p_cur_seq   NUMBER(10) ;
    output_file utl_file.file_type ;
BEGIN
    utl_file.fclose_all;

END;

/

EXEC file_JF_20150930_002_test();

删除指定文件

CREATE OR REPLACE PROCEDURE file_JF_20150930_002_test()
AS
BEGIN

    utl_file.fremove ('MYPATH' , 'JF_20150930_002_test.txt') ;
END;

/

EXEC file_JF_20150930_002_test();