UTL_FILE 实现PL/SQL文件的读写操作。可以对位于服务器上的操作系统文件进行读写或写入操作。为了安全
问题,该表限制了访问的目录和文件。只能访问init.ora中指定的目录UTL_FILE_DIR。
如果此参数为*则标识任何目录皆可用。
子程序:
FOPEN 打开一个文件。文件必须在指定目录中。必须已经存在,不能有FOPEN创建。
也不能指定文件最大行大小的参数。大多数系统默认是1023。最多同时打开50个文件。
函数原型:UTL_FILE.FOPEN (
location IN VARCHAR2, 文件目录
filename IN VARCHAR2, 文件名
open_mode IN VARCHAR2) 打开模式
RETURN UTL_FILE.FILE_TYPE; 返回的文件句柄。
IS_OPEN 测试一个文件句柄是否标识一个打开的文件。仅仅是测试是否描述一个打开的文件。
并不能保证在读写文件时没有操作系统错误。
函数原型:UTL_FILE.IS_OPEN (
file IN FILE_TYPE) 文件句柄。
RETURN BOOLEAN;
FCLOSE 关闭句柄标识的文件。如果关闭时仍然有缓冲数据要写入文件,那么会抛出写异常。
函数原型:UTL_FILE.FCLOSE (
file IN OUT FILE_TYPE);
FCLOSE_ALL 关闭会话中所有打开的文件句柄。应该只被运用于紧急情况,例如例外处理中。
函数原型:UTL_FILE.FCLOSE_ALL;
GET_LINE 从文件中取出一行文本并送往输出缓冲参数。
函数原型:UTL_FILE.GET_LINE (
file IN FILE_TYPE,
buffer OUT VARCHAR2);
PUT 把字符串从缓冲区写到文件。必须写方式打开文件。不能写入回车符,需要的话调用
NEW_LINE结束一行,或者使用PUT_LINE写入带有回车符的一整行。
函数原型:UTL_FILE.PUT (
file IN FILE_TYPE,
buffer IN VARCHAR2);
NEW_LINE 写入一个或多个回车符。
函数原型:UTL_FILE.NEW_LINE (
file IN FILE_TYPE,
lines IN NATURAL := 1); 回车符的个数。
PUT_LINE 将文本串从缓冲区写到文件。必须写模式打开。写入带有换行符的一整行。
函数原型:UTL_FILE.PUT_LINE (
file IN FILE_TYPE,
buffer IN VARCHAR2);
PUTF 提供了一种格式化的PUT函数。有两个参数:%S和\N
%S 用指定次序的参数值替代。
\n 换行符。可以自动用适合所在平台格式的换行符替代。
函数原型:UTL_FILE.PUTF (
file IN FILE_TYPE,
format IN VARCHAR2, 包含%S和\N的格式化文本。
[arg1 IN VARCHAR2 DEFAULT NULL,参数序列。
. . .
arg5 IN VARCHAR2 DEFAULT NULL]);
FFLUSH 强制把缓冲区的数据写入文件。通常用在马上要读文件的情况。
函数原型:UTL_FILE.FFLUSH (
file IN FILE_TYPE);
invalid_maxlinesize EXCEPTION;
问题,该表限制了访问的目录和文件。只能访问init.ora中指定的目录UTL_FILE_DIR。
如果此参数为*则标识任何目录皆可用。
子程序:
FOPEN 打开一个文件。文件必须在指定目录中。必须已经存在,不能有FOPEN创建。
也不能指定文件最大行大小的参数。大多数系统默认是1023。最多同时打开50个文件。
函数原型:UTL_FILE.FOPEN (
location IN VARCHAR2, 文件目录
filename IN VARCHAR2, 文件名
open_mode IN VARCHAR2) 打开模式
RETURN UTL_FILE.FILE_TYPE; 返回的文件句柄。
IS_OPEN 测试一个文件句柄是否标识一个打开的文件。仅仅是测试是否描述一个打开的文件。
并不能保证在读写文件时没有操作系统错误。
函数原型:UTL_FILE.IS_OPEN (
file IN FILE_TYPE) 文件句柄。
RETURN BOOLEAN;
FCLOSE 关闭句柄标识的文件。如果关闭时仍然有缓冲数据要写入文件,那么会抛出写异常。
函数原型:UTL_FILE.FCLOSE (
file IN OUT FILE_TYPE);
FCLOSE_ALL 关闭会话中所有打开的文件句柄。应该只被运用于紧急情况,例如例外处理中。
函数原型:UTL_FILE.FCLOSE_ALL;
GET_LINE 从文件中取出一行文本并送往输出缓冲参数。
函数原型:UTL_FILE.GET_LINE (
file IN FILE_TYPE,
buffer OUT VARCHAR2);
PUT 把字符串从缓冲区写到文件。必须写方式打开文件。不能写入回车符,需要的话调用
NEW_LINE结束一行,或者使用PUT_LINE写入带有回车符的一整行。
函数原型:UTL_FILE.PUT (
file IN FILE_TYPE,
buffer IN VARCHAR2);
NEW_LINE 写入一个或多个回车符。
函数原型:UTL_FILE.NEW_LINE (
file IN FILE_TYPE,
lines IN NATURAL := 1); 回车符的个数。
PUT_LINE 将文本串从缓冲区写到文件。必须写模式打开。写入带有换行符的一整行。
函数原型:UTL_FILE.PUT_LINE (
file IN FILE_TYPE,
buffer IN VARCHAR2);
PUTF 提供了一种格式化的PUT函数。有两个参数:%S和\N
%S 用指定次序的参数值替代。
\n 换行符。可以自动用适合所在平台格式的换行符替代。
函数原型:UTL_FILE.PUTF (
file IN FILE_TYPE,
format IN VARCHAR2, 包含%S和\N的格式化文本。
[arg1 IN VARCHAR2 DEFAULT NULL,参数序列。
. . .
arg5 IN VARCHAR2 DEFAULT NULL]);
FFLUSH 强制把缓冲区的数据写入文件。通常用在马上要读文件的情况。
函数原型:UTL_FILE.FFLUSH (
file IN FILE_TYPE);
invalid_maxlinesize EXCEPTION;
http://otn.oracle.com/sample_code/products/forms/6idemos.html
f UTL_FILE.file_type;
s varchar2(200);
a varchar2(200);
path varchar2(50);
begin
path:='c:';
f:=utl_file.fopen('c:','aa.CSV','R');
loop
utl_file.get_line(f,s);
N:=INSTR(S,',',1,1);
a := substr(s,.....)
select count(*) into i from aa where aa = a;
if i > 0 then
update .... set ...
else
insert into .....
end if;
end loop;
utl_file.fclose(f);
COMMIT;
EXCEPTION
when NO_DATA_FOUND then
utl_file.fclose(f);
rollback;
end;
/