oracle的包utl_file用于读写操作系统的文件,前提是首先创建directory对象、授权。然后就可以使用utl_file包中提供的类型、过程、函数来读取,写入,,操作目录中的文件了。
创建directory的示例如下:
sql> create directory czw as 'd:\';
directory created
sql> grant read,write on directory czw to scott;
grant succeeded
1、file_type
该类型是utl_file包中定义的记录类型,其成员是私有的,不能够被直接引用。该类型的定义如下:
type file_type is record(
id binary_integer,datatype binary_integer
);
2、fopen
该函数用于打开文件。使用这个函数最多可以打开50个文件,语法如下:
utl_file.fopen(
location in varchar2,
filename in varchar2,
open_mode in varchar2,
max_linesize in binary_integer
)
return file_type;
当成功的执行了该函数之后,就会返回文件句柄,访问该文件可以使用该文件句柄。如果执行失败的话,则会触发例外或者显示错误。注意,当指定文件位置的时候,必须要使用directory对象,并且其名称必须为大写。示例如下:
declare
handle utl_file.file_type;
begin
handle := utl_file.fopen('czw','dywt.txt','r',1000);
dbms_output.put_line('d:\dywt.txt已经被打开');
end;
3、fopen_nchar
该函数用于以unicode方式打开文件。当使用该函数打开文件之后,读写文件会使用unicode取代数据库字符集。语法如下:
utl_file.fopen_nchar(
location in varchar2,
filename in varchar2,
open_mode in varchar2,
max_linesize in binary_integer)
return file_type;
4、is_open
该函数用于确定文件是否已经被打开,语法如下:
utl_file.is_open(file in file_type) return boolean;
如上所示,file用于指定文件句柄。如果文件已经被打开,则返回true,否则则返回false,该函数的示例如下:
declare
handle utl_file.file_type;
begin
if not utl_file.is_open(handle) then
handle := utl_file.fopen('czw','dywt.txt','r',1000);
end if;
dbms_output.put_line('d:\dywt.txt已经被打开');
end;
