日期:2014-05-17  浏览次数:21228 次

关于oracle11g中utl_file包的用法!
最近刚接触oracle11g,想问各位大神一个问题,网上说要想用utl_file这个包读取文件就要改init.ora中utl_file_dir的值,但是我找了半天也没找到这个路径在哪设置?还有请问下如何用读取一个txt中的内容呢?谢谢!
------解决方案--------------------
oracle中设置UTL_FILE_DIR参数

oracle中设置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';  
    参见oracle online: 
    In the past,accessible directories for the UTL_FILE functions were specified in the    initialization file using the UTL_FILE_DIR parameter. However, UTL_FILE_DIR access is not    recommended. It is recommended that you use the CREATE DIRECTORY  feature, which    replaces UTL_FILE_DIR.Directory objects offer more flexibility and granular control to the    UTL_FILE application administrator, can be maintained dynamically (that is, without shutting    down the database), and are consistent with other Oracle tools. CREATE DIRECTORY privilege    is granted only to SYS and SYSTEM by default. 
    
第三步:授权给指定用户,以便执行utl_file 
    GRANT  EXECUTE  ON  utl_file  TO  scott;  
    第四步:conn  scott/tiger  
    就可以正常使用utl_file了。    
    
    摘要:本文主要讨论如何利用Oracle的UTL_FILE包来实现对磁盘文件的I/O操作。  
    
      文件I/O对于数据库的开发来说显得很重要,比如如果数据库中的一部分数据来自于磁盘文件,那么就需要使用I/O接口把数据导入到数据库中来。在    PL/SQL中没有直接的I/O接口,一般在调试程序时可以使用Oracle自带的DBMS_OUTPUT包的put_line函数(即向屏幕进行I/O操作)即可,但是对于磁盘文件的I/O操作它就无能为力了。其实Oracle同样也提供了可以进行文件I/O的实用包-----UTL_FILE包,利用这个实用包提供的函数来实现对磁盘的I/O操作。

1.准备工作  
    由于Oracle数据库对包创建的目录有一个安全管理的问题,所以并不是所有的文件目录能够被UTL_FILE包所访问,要更新这种目录设置,就得到init.ora里将UTL_FILE_DIR域设置为*,这样UTL_FILE包就可以对所有的目录文件进行访问了。  
    
2.    文件I/O的实施  
    UTL_FILE包提供了很多实用的函数来进行I/O操作,主要有以下几个函数:  
    
      fopen  打开指定的目录路径的文件。  
      get_line  获取指定文件的一行的文本。  
      put_line  向指定的文件写入一行文本。  
      fclose  关闭指定的文件。  
      下面利用这些函数,实现从文件取数据,然后将数据写入到相应的数据库中。  
    create or replace procedure  loadfiledata(p_path varchar2,p_filename varchar2)  as 
    v_filehandle utl_file.file_type;    --定义一个文件句柄  
    v_text &nb