`
helloJ
  • 浏览: 165728 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

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

阅读更多

摘要:本文主要讨论如何利用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。设置完必须重新启动数据库

 

================================================

 

命令设置:

system@oracle9i as sysdba

 

user:system

pwd:******

数据库:oracle9i

连接为:sysdba

执行命令:

alter system set utl_file_dir='D:\exportDataTest' scope=spfile;
grant execute on utl_file to scott;

 

服务器关闭-重启

(

(1) 以oracle身份登录数据库,命令:su – oracle
(2) 进入Sqlplus控制台,命令:sqlplus /nolog
(3) 以系统管理员登录,命令:connect / as sysdba

(4) 启动数据库,命令:startup
(5) 如果是关闭数据库,命令:shutdown immediate
(6) 退出sqlplus控制台,命令:exit
(7) 进入监听器控制台,命令:lsnrctl
(8) 启动监听器,命令:start
(9) 退出监听器控制台,命令:exit
(10) 重启数据库结束

)

登陆scott,就可以用utl_file包对路径'D:\exportDataTest' 进行文件的输入输出操作

 

分享到:
评论

相关推荐

    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数据库是一种广泛...总的来说,Oracle数据库的管理和调试涉及到多个层面,包括表空间的规划、数据存储结构的理解以及利用UTL_FILE包进行日志记录。掌握这些概念和技术对于有效管理和维护Oracle数据库至关重要。

    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`包提供了一...

    plsql excel example

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

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

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

    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]快速上手工作+常用命令

    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:...

    oracle命令详解初学者

    在 Oracle 数据库管理中,强制日志切换是一项重要的维护活动,它可以帮助确保数据库日志文件的有效管理和循环利用。当发出 `ALTER SYSTEM SWITCH LOGFILE` 命令时,系统会将当前正在使用的重做日志文件组切换到下一...

    Oracle常用命令

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

    oracle11g 内部参数出错问题

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

    Oracle 12C 首次安装

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

    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新手入门指导之七—ORACLE十二章管理命令大全.txt

    强制进行日志文件的切换有助于确保所有未提交的事务都被写入到重做日志文件中,这对于备份或恢复操作至关重要。 **命令格式:** ```sql ALTER SYSTEM SWITCH LOGFILE; ``` **示例:** ```sql SQL&gt; ALTER SYSTEM ...

    典藏之作 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