`
icelander
  • 浏览: 72513 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Oracle的UTL_FILE包来实现对磁盘文件的I/O操作

阅读更多
第一步:以管理员用户登陆  
  如: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   varchar2(100);   --存放文本  
  v_name   test_loadfile.name%type;  
  v_addr_jd   test_loadfile.addr_jd%type;  
  v_region   test_loadfile.region%type;  
  v_firstlocation   number;  
  v_secondlocation   number;  
  v_totalinserted   number;  
  begin  
  if   (p_path   is   null   or   p_filename   is   null)   then  
  goto   to_end;  
  end   if;  
  v_totalinserted:=0;  
  /*open   specified   file*/  
  v_filehandle:=utl_file.fopen(p_path,p_filename,'r');  
  loop  
  begin  
  utl_file.get_line(v_filehandle,v_text);  
  exception  
  when   no_data_found   then  
  exit;  
  end   ;  
  v_firstlocation:=instr(v_text,',',1,1);  
  v_secondlocation:=instr(v_text,',',1,2);  
  v_name:=substr(v_text,1,v_firstlocation-1);  
  v_addr_jd:=substr(v_text,v_firstlocation+1,v_secondlocation-v_firstlocation-1);  
  v_region:=substr(v_text,v_secondlocation+1);  
  /*插入数据库操作*/  
  insert   into   test_loadfile  
  values   (v_name,v_addr_jd,v_region);  
  commit;  
  end   loop;  
  <<to_end>>  
  null;  
  end   loadfiledata;  
   
   
   
  可以不用在init.ora中改的  
  只要用管理员的权限登陆,执行:  
  create   directory   UTL_FILE_TEST   as   '\*'    
  应该就可以了,不用新启动oracle的  
  不过其他用户要使用此目录要授权的  
  /  
   
   
  grant   create   any   directory   to   scott;  
    grant   create   any   library   to   scott;  
    create   or   replace   directory   utllobdir   as   'C:\ep';  
   
   
  在initsid.ora文件中,加入或修改  
      设置utl_file_dir的要点:  
    1。   utl_file_dir=*     这表示你能操作任何目录,尽量不要用  
    2。   utl_file_dir=d:\   这表示你能操作d:\目录下的文件,但你不能操作d:\目录下的子目录  
    3。注意在设置  
      utl_file_dir=路径时,如果路径是长路径名,例如c:\my   temp目录,则你必须加上'',例如:  
      utl_file_dir='c:\my   temp'  
    4。utl_file_dir可以是多个路径  
          utl_file_dir=c:\,d:\,d:\temp,'c:\my   temp'  
    5。设置完必须重新启动数据库
分享到:
评论

相关推荐

    utl_file.txt

    尽管UTL_FILE的I/O能力类似于标准的操作系统流文件I/O(如OPEN、GET、PUT、CLOSE),但在服务器端实现时存在一些限制。 #### 安全性 UTL_FILE适用于客户端和服务器端的PL/SQL环境。客户端的实现遵循正常的操作系统...

    Oracle数据库通过UTL—FILE实现磁盘文件操作.pdf

    Oracle数据库的UTL_FILE包是一个内置的PL/SQL包,它允许数据库直接访问和操作服务器端的磁盘文件,从而实现数据库与文件系统的交互。这个包提供了一系列过程和函数,如`popen`、`flush`、`put`、`put_line`、`get_...

    Oracle数据库整理

    Oracle提供了UTL_FILE包,这是一个允许PL/SQL程序读写操作系统文件的实用程序包。例如,你可以创建一个存储过程来记录日志信息: ```sql CREATE OR REPLACE Procedure log_write (dispaly_string In Varchar2) As ...

    Plsql操作excel.docx

    UTL_FILE是Oracle提供的一个内建包,用于读写操作系统文件。在描述的示例中,它被用来创建一个简单的CSV格式的文件,模拟Excel文件。以下是使用UTL_FILE创建Excel文件的基本步骤: ```sql DECLARE l_file UTL_FILE...

    oracle 报表开发中用PCK直接生成xml数据文件

    需要注意的是,这种方法生成的XML文件是以文本形式输出的,如果需要XML文件以二进制格式存储,可以考虑其他方法,例如直接写入BFILE或通过PL/SQL的UTL_FILE包写入磁盘。 总的来说,Oracle的`dbms_xmlgen`包提供了一...

    批量导出ORACLE数据库BLOB字段生成图片

    可以使用PL/SQL的UTL_FILE包或者在客户端工具中执行SQL语句,将BLOB数据写入到磁盘上指定的文件。 7. **文件命名**:根据描述中的"文件名数据列名",确保正确地为每个图片文件分配正确的文件名。 在上述过程中,`...

    plsql excel example

    1. **Oracle的UTL_FILE包**:在PL/SQL中,可以使用UTL_FILE包来读取和写入文件,包括Excel文件。虽然UTL_FILE不直接支持Excel格式,但你可以先将Excel数据保存为CSV,然后通过这个包读取和写入。 2. **PL/SQL生成...

    [oracle]快速上手工作+常用命令

    1. 首先在`init.ora`文件中指定UTL_FILE_DIR参数来设置临时目录。 ```sql UTL_FILE_DIR='...' ``` 2. 使用`DBMS_LOGMNR_D.BUILD`过程创建LogMiner会话。 ```sql EXECUTE DBMS_LOGMNR_D.BUILD('oradb.ora','c:...

    db2与oracle差别.pdf

    Oracle 数据库提供了很多置包:DBMS_OUTPUT、DBMS_SQL、DBMS_ALERT、DBMS_PIPE、DBMS_JOB、DBMS_LOB、DBMS_UTILITY、UTL_FILE、UTL_MAIL 和UTL_SMTP 等。使用了这些包的应用程序要想在 DB2 上运行,就需要在 DB2 中...

    Oracle常用命令

    首先需要在初始化参数文件中设置UTL_FILE_DIR参数,然后使用`dbms_logmnr`包的一系列函数来完成构建、添加日志文件、启动和结束LogMiner会话的过程。 #### 第二章:表空间管理 表空间是Oracle数据库中数据存储的...

    oracle11g 内部参数出错问题

    5. **检查硬件和操作系统**:错误也可能源于硬件故障或操作系统层面的问题,所以检查存储设备、内存、磁盘I/O等也是必要的。 6. **升级和补丁**:确保数据库版本是最新的,并应用了所有相关的补丁。有时候,新的...

    oracle命令详解初学者

    检查点是数据库的一个关键机制,它将缓冲区中的数据刷新到磁盘上的数据文件中,同时更新控制文件和重做日志文件,以反映最新的数据库状态。这一操作有助于提高数据库恢复的速度,因为减少了需要重做的事务数量。 ##...

    Oracle 12C 首次安装

    通常,我们会创建专用的文件系统用于Oracle数据库,并确保有足够的磁盘空间。此外,还要为Oracle进程和服务配置适当的权限,这通常通过修改系统上的初始化脚本和使用`chown`、`chmod`命令来完成。 最后,安装完成后...

    oracle常用命令

    Oracle数据库管理系统是世界上最广泛使用的数据库系统之一,它提供了丰富的管理和操作工具。以下是对标题和描述中涉及的一些Oracle常用命令的详细解释: ### 日志管理 1. **强制切换重做日志**: `alter system ...

    Oracle数据库常用命令.pdf

    1. **指定UTL_FILE_DIR参数**:在初始化参数文件中设置`UTL_FILE_DIR`。 ```sql SQL&gt; EXECUTE DBMS_LOGMNR_D.BUILD('oradb.ora','c:\oracle\oradb\log'); ``` 2. **添加日志文件**:将需要分析的日志文件添加到...

    Oracle常用命令大汇总

    首先,在`init.ora`文件中设置`UTL_FILE_DIR`参数来指定文件读写的目录: ```sql UTL_FILE_DIR = '' ``` **2. 构建LogMiner** 接下来,执行以下PL/SQL代码以初始化LogMiner会话: ```sql SQL&gt; execute dbms_...

    典藏之作 oracle 常用命令大汇总

    - 在`init.ora`文件中指定`utl_file_dir`参数的值。 ``` A、in the init.ora specify utl_file_dir='...' ``` - 构建LogMiner字典。 ``` B、sql&gt; execute dbms_logmnr_d.build('oradb.ora','c:\oracle\oradb\...

    ORACLE相关问题解决

    1. **错误处理**:导入过程中可能出现的数据格式错误、约束冲突等,可以通过`EXCEPTION`语句捕获并处理,或者使用`UTL_FILE`包记录错误日志,便于后期分析。 2. **性能监控**:使用`DBMS_MONITOR`或`V$视图`监控...

Global site tag (gtag.js) - Google Analytics