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();