UTL_FILE文件操作包:
1,UTL_FILE.FOPEN(location in varchar2,filename in varchar2,open_mode in varchar2)
location 路径
FILENAME 文件名
OPEN_MODE 打开模式:R 读,W 写,A 附加文本,如果文件不存在,会用W先创建出来,W有覆盖功能,其中location并不能简单的指定为'D:/temp'等路径,需要建立一个directory变量并付给用户权限:
创建directory
create or replace directory testfile as '/home/oracle/user1/test';
给用户授权
grant read,write on directory testfile to user1;
grant execute on utl_file to user1;
然后就可以用UTL_FILE包建立文件了:
v_file utl_file.file_type; 句柄
v_file := utl_file.fopen('dir','filename','w');
2,utl_file.is_open 如果文件句柄指定的文件已打开,返回TRUE,否则FALSE
FUNCTION UTL_FILE.IS_OPEN(FILE IN UTL_FILE.FILE_TYPE) RETURN BOOLEAN;
UTL_FILE只提供一个方法去读取数据:GET_LINE
3,UTL_FILE.GET_LINE 读取指定文件的一行到提供的缓存
PROCEDUREUTL_FILE.GET_LINE
(FILE IN UTL_FILE.FILE_TYPE,
BUFFER OUT VARCHAR2);
FILE 由FOPEN返回的文件句柄 buffer 读取的一行数据的存放缓存,buffer必须足够大,否则,会出现VALUE_ERROR异常,行终止符不被传进BUFFER。
4UTL_FILE.PUT 在当前行输出数据
PROCEDURE UTL_FILE.PUT
(FILE IN UTL_FILE.FILE_TYPE,
BUFFER OUT VARCHAR2);
5,UTL_FILE.NEW_LINE 在当前位置输出新行或行终止符,必须使用NEW_LINE来结束当前行,或者使用PUT_LINE输出带有终止符的完整行数据。
PROCEDURE UTL_FILE.NEW_LINE
(FILE IN UTL_FILE.FILE_TYPE,
LINES IN NATURAL:=1);
FILE 由FOPEN返回的文件句柄
lines 要插入的行数,如果不指定LINES参数,NEW_LINE会只用默认值1,如果要插入空白行,可以使用:UTL_FILE.NEW_LINE(my_file,2);如果参数为0或者负数,什么都不会写入文本。
6,utl_file.put_line 输出一个字符串以及一个与系统有关的终止符
procedure utl_file.put_line
(file in utl_file.file_type,
buffer in varchar2);
在调用utl_file.put_line前,必须先打开文件。
PUT_LINE相当于PUT后面加上NEW_LINE;也想当于putf的格式串“%s/n”.
7,utl_file.putf 以一个模板式输出至多5个字符串,类似C中的printf
procedure utl_file.putf
(file in file_type,
format in varchar2,
arg1 in varchar2 default null,
arg2 in varchar2 default null,
arg3 in varchar2 default null,
arg4 in varchar2 default null,
arg5 in varchar2 default null);
%s 在格式串中可以使用最多5个%s,与后面的5个参数已一一对应。
%n 换行符。
8,utl_file.fflush 确保所有数据写入文件。
procedure utl_file.fflush(file in utl_file.file_type);
9,utl_file.fclose 关闭文件
procedure utl_file.fclose(file in out file_type);
utl_file.fclose_all 关闭所有已打开的文件
procedure utl_file.fclose_all;
在结束程序时可以使用fclose_all也可以在exception使用,当异常退出时,文件也会被关闭
exception
when others
then
utl_file.fclose_all;
...other clean up activities...
end;