包UTL_FILE 提供了在操作系统层面上对文件系统中文件的读写功能。非超级用户在使用包UTL_FILE中任何函数或存储过程前必须由超级用户授予在这个包上的EXECUTE权限。例如:我们使用下列命令对用户mary进行授权:
    GRANT EXECUTE ON PACKAGE SYS.UTL_FILE TO mary;
    如果使用包UTL_FILE中的函数和存储过程访问文件,那么操作系统中的用户enterprisedb必须在要访问的目录和文件上有相应的读写权限。如果没有相应权限的话,在执行包UTL_FILE中函数或存储过程的时候,就会产生异常。
    在引用文件的时候,要使用到一个文件句柄,来表示对文件的读或写。文件句柄是通过包UTL_FILE中名称为UTL_FILE.FILE_TYPE的公有变量来定义的。我们必须声明一个类型为FILE_TYPE的变量来接收通过函数FOPEN返回的文件句柄。这个文件句柄将用于随后在文件上的所有操作
对于文件系统上目录的引用是通过使用目录名称,或者由CREATE DIRECTORY命令为目录分配的化名来实现的。
 
UTL_FILE常用方法:
FOPEN
IS_OPEN
GET_LINE
PUT
NEW_LINE
PUT_LINE
PUTF 
FFLUSH 
FCLOSE
FCLOSE_ALL 
FRENAME
FREMOVE
FFLUSH
FCOPY
 
UTL_FILE.FOPEN 用法
    FOPEN会打开指定文件并返回一个文件句柄用于操作文件。
适用范围:
    所有PL/SQL版本,Oracle 8.0版及以上。
函数原型:
 FUNCTION UTL_FILE.FOPEN (      FUNCTION UTL_FILE.FOPEN (
    location    IN VARCHAR2,      location    IN VARCHAR2,
    filename    IN VARCHAR2,      filename    IN VARCHAR2,
    open_mode    IN VARCHAR2)      open_mode    IN VARCHAR2,
 RETURN file_type;                max_linesize IN BINARY_INTEGER)
                                RETURN file_type;
参数
  location    文件地址 
  filename    文件名 
  openmode    打开文件的模式(参见下面说明) 
              3种文件打开模式:
               R 只读模式。一般配合UTL_FILE的GET_LINE来读文件。
              W 写(替换)模式。文件的所有行会被删除。
                 PUT, PUT_LINE, NEW_LINE, PUTF和FFLUSH都可使用
              A 写(附加)模式。原文件的所有行会被保留。在最末尾行附加新行。
                PUT, PUT_LINE, NEW_LINE, PUTF和FFLUSH都可使用
  max_linesize  文件每行最大的字符数,包括换行符。最小为1,最大为32767。
 
打开文件时注意以下几点:
  *  文件路径和文件名合起来必须表示操作系统中一个合法的文件。
  *  文件路径必须存在并可访问;FOPEN并不会新建一个文件夹。
  *  如果你想打开文件进行读操作,文件必须存在;如果你想打开文件进行写操作,文件不存在时,会新建一个文件。
  *  如果你想打开文件进行附加操作,文件必须存在。A模式不同于W模式。文件不存在时,会抛出INVALID_OPERATION异常。
  *  FOPEN 会抛出以下异常
            UTL_FILE.INVALID_MODE
            UTL_FILE.INVALID_OPERATION
            UTL_FILE.INVALID_PATH
            UTL_FILE.INVALID_MAXLINESIZE
 
 
UTL_FILE.IS_OPEN用法
    如果文件句柄指定的文件已打开,返回TRUE,否则FALSE
函数原型:
    FUNCTION UTL_FILE.IS_OPEN (file IN UTL_FILE.FILE_TYPE) RETURN BOOLEAN;
 
 
UTL_FILE.GET_LINE用法
    UTL_FILE只提供一个方法去读取数据:GET_LINE 。读取指定文件的一行到提供的缓存。
函数原型:
    PROCEDURE UTL_FILE.GET_LINE (file IN UTL_FILE.FILE_TYPE,  buffer OUT VARCHAR2);
参数说明:
    file    由FOPEN返回的文件句柄 
    buffer  读取的一行数据的存放缓存
            buffer必须足够大。否则,会抛出VALUE_ERROR 异常。行终止符不会被传进buffer。
异常:
    NO_DATA_FOUND 
    VALUE_ERROR 
    UTL_FILE.INVALID_FILEHANDLE
    UTL_FILE.INVALID_OPERATION
    UTL_FILE.READ_ERROR
 
fopen和open区别 
UTL_FILE.PUT用法
    在当前行输出数据
函数原型:
    PROCEDURE UTL_FILE.PUT (file IN UTL_FILE.FILE_TYPE, buffer OUT VARCHAR2);
参数说明:
    file  由FOPEN返回的文件句柄
    buffer  包含要写入文件的数据缓存;Oracle8.0.3及以上最大允许32kB,早期版本只有1023B。
UTL_FILE.PUT输出数据时不会附加行终止符。
异常:
    UTL_FILE.INVALID_FILEHANDLE
    UTL_FILE.INVALID_OPERATION
    UTL_FILE.WRITE_ERROR
 
 
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);
    如果lines参数为0或负数,什么都不会写入文件。
异常:
    VALUE_ERROR
    UTL_FILE.INVALID_FILEHANDLE
    UTL_FILE.INVALID_OPERATION
    UTL_FILE.WRITE_ERROR
例子:
如果要在UTL_FILE.PUT后立刻换行,可以如下例所示:
PROCEDURE add_line (file_in IN UTL_FILE.FILE_TYPE, line_in IN VARCHAR2)
IS
BEGIN
  UTL_FILE.PUT (file_in, line_in);
  UTL_FILE.NEW_LINE (file_in);
END;
 

UTL_FILE.PUT_LINE
  输出一个字符串以及一个与系统有关的行终止符
函数原型:
  PROCEDURE UTL_FILE.PUT_LINE (file IN UTL_FILE.FILE_TYPE, buffer IN VARCHAR2);
参数说明:
  file  由FOPEN返回的文件句柄
  buffer  包含要写入文件的数据缓存;Oracle8.0.3及以上最大允许32kB,早期版本只有1023
B
注意:
  在调用UTL_FILE.PUT_LINE前,必须先打开文件。
异常:
  UTL_FILE.INVALID_FILEHANDLE
  UTL_FILE.INVALID_OPERATION
  UTL_FILE.WRITE_ERROR
例子:
这里利用UTL_FILE.PUT_LINE从表emp读取数据到文件:
PROCEDURE emp2file
IS
  fileID UTL_FILE.FILE_TYPE;
BEGIN
  fileID := UTL_FILE.FOPEN ('/tmp', 'emp.dat', 'W');
 
 
  FOR emprec IN (SELECT * FROM emp)
  LOOP
      UTL_FILE.PUT_LINE
        (TO_CHAR (pno) || ',' ||
          ame || ',' ||
          ...
          TO_CHAR (emprec.deptno));
  END LOOP;
 
  UTL_FILE.FCLOSE (fileID);
END;
PUT_LINE相当于PUT后加上NEW_LINE;也相当于PUTF的格式串"%sn"。
 
 
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);
参数说明:
    file  由FOPEN返回的文件句柄
    format  决定格式的格式串
    argN  可选的5个参数,最多5个
    格式串可使用以下样式
    %s  在格式串中可以使用最多5个%s,与后面的5个参数一一对应

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。