oracle utl_file包的使用

来源:互联网 发布:java等级划分英语缩写 编辑:程序博客网 时间:2024/05/18 01:54

 I.设置路径utl_file_dir

   第一步:以管理员用户登陆   
   如:conn    sys/password@sid    as    sysdba  
   第二步:设置可操作目录   
   需要指定utl_file包可以操作的目录。在oracle    10g以前,可以用以下方法:   
   1、alter    system    set    utl_file_dir='e:/utl'    scope=spfile;   
   2、在init.ora文件中,配置如下:   
   UTL_FILE=E:/utl或者UTL_FILE_DIR=E:/utl   
   在oracle    10g中建议用以下方法配置:CREATE    DIRECTORY    utl    AS   'E:/utl';   

   第三步:授权给指定用户,以便执行utl_file   
   GRANT    EXECUTE    ON    utl_file    TO    scott;   
   第四步:conn    scott/tiger   
   就可以正常使用utl_file了。 

  II.包说明

    1.方法说明

   utl_file方法

 2.步骤:

1)声明一个文件句柄变量,以便调用utl_file例程时使用它标识文件。可以使用utl_file.file_type类型声明文件句柄变量。
2)声明一个varchar2类型的字符串,作为一次读取文件中一行的缓冲区。
3)调用utl_file.fopen打开文件或者采用utl_file.fopen_nchar以unicode方式打开文件。打开文件时需要指定是读还是写文件,不能够既读又写文件。
4)如果读取文件,则调用utl_file.get_line或者get_line_nchar过程;如果是写文件则调用utl_file.put_line或者put_line_nchar过程。
5)完成操作后,调用utl_file.fclose关闭文件。

3.可能产生的异常

utl_file异常

 

4.部分方法说明

a.fopen

 function fopen(location in varchar2,

                        filename in varchar2,

                        open_mode in varchar2,

                         max_linesize in  binary_integer) return file_type;
要打开的文件目录路径必须存在,否则fopen不会自动创建。
location:文件目录的路径。如果该目录与可访问目录表中的目录不匹配,则引发异常utl_file.invalid_path
filename:文件名.
open_mode:'r'读文本,‘W’写文本,‘A’追加文本,大小写不敏感。 当为A时如果文件不存在,则按W方式创建新文件。
max_linesize:文件的最大行数,1-32767,如果没有该参数,则为1024,如果值不在1-32767之间,引发utl_file.invalid_maxlinesize异常
返回值:返回值为utl_file.file_type类型。后续函数使用的文件句柄。

 

b.putf

putf(file_handle in file_type,
     format invarchar2,
     arg1 in varchar2 default null,arg2 in varchar2 default null,....)
可以格式化文本format.
如:
utl_file.putf(v_file,'Hi there!/nMy name is %s,and I am a %s major./n','Scott','Comput');
/n:换行符,%s用后面参数一一对应来替换

 

c.fflush

fflush(file_handle in file_type);
一般向文件传输数据时通常是存储在缓冲区中的,当该缓冲区满后,才被送往输出文件,fflush强行把缓冲区中的字段立即定稿指定文件,只把以new_line字符结尾的行写入文件中,put操作的字符都将在缓冲区保留。

 

5.例子

CREATE OR REPLACE PROCEDURE p_utl_file(p_str VARCHAR2 DEFAULT NULL) AS
/*

*/
  --定义文件句柄
  v_file utl_file.file_type;
BEGIN
  --打开文件
  v_file:=utl_file.fopen('e:/test/utl','testutl.txt','a',32767);
  --将内容写入文件
  utl_file.put(v_file,p_str);
  utl_file.new_line(v_file,1);
  --缓存未满,上面内容未写入文件,单步调用时可以看到这点
 
  --fflush强制将new_line结束的内容写入文件
  utl_file.fflush(v_file);
  --文件中已经有上一步的内容
  utl_file.put_line(v_file,p_str||'1');
  utl_file.fclose(v_file);
EXCEPTION
  WHEN OTHERS THEN
    NULL;
END p_utl_file;

原创粉丝点击