摘要:本文主要讨论如何利用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;

<>

null;

end loadfiledata;

/

3. 测试环境

首先要创建一个目标表TEST_LOADFILE,它用来存储文件中的数据:

CREATE TABLE TEST_LOADFILE (

NAME VARCHAR2 (100) NOT NULL,

ADDR_JD VARCHAR2 (20),

REGION VARCHAR2 (6) ) ;

然后就可以在sqlplus里输入如下的代码并执行即可。

declare

v_path varchar2(200);

v_filename varchar2(200);

begin

v_path:='F:\ ';

v_filename:='地址信息.txt';

loadfiledata(v_path,v_filename);

end;

/

需要注意的是,这里我的调试路径为“f:\”地址,如果读者自己建立实验环境,应该设置为的“地址信息”文件的路径

整个调试环境是:

服务器端:UNIX操作系统+Oracle9i数据库服务器,

客户端: sqlplus,操作系统为WIN2000。

4. 小结

Oracle本身提供了大量使用的包,如UTL_HTTP包,DBMS_OUTPUT包等,这些包分别封装了不同的功能,它们使得进行大量的应用程序开发的可能,从而拓展了Oracle的功能。

create or replace procedure test_error

(

str out varchar2,

str2 out varchar2

)

as

begin

declare

isto_file utl_file.file_type;

err_num number;

i number;

k number;

m number;

err_msg varchar2(100);

fp_buffer varchar2(4000);

begin

isto_file := utl_file.fopen('IST0_DIR', 'kj021320.txt', 'W');

i:=0;

while (i<2)

loop

utl_file.put_line(isto_file, 'My');

i:=i+1;

end loop;

utl_file.fflush(isto_file);

utl_file.fclose(isto_file);

isto_file := utl_file.fopen('IST0_DIR', 'kj021320.txt', 'a');

m:=0;

while (m<2)

loop

utl_file.put_line(isto_file, 'My');

m:=m+1;

end loop;

utl_file.fflush(isto_file);

utl_file.fclose(isto_file);

isto_file := utl_file.fopen('IST0_DIR', 'kj021320.txt', 'R');

str2:='';

loop

utl_file.get_line (isto_file , fp_buffer );

str2:=str2 || fp_buffer;

end loop;

utl_file.fclose(isto_file);

for j in 1..10  /* for */

loop

k:=11;

end loop;

EXCEPTION

WHEN OTHERS THEN

err_num:=sqlcode; /* 異常num */

err_msg:=substr(sqlerrm,1,100); /* 異常msg */

str:=substr(sqlerrm,1,100);

end;

end test_error;

首先我们得先建立一个ORACLE的目录对象 指向C:"

create or replace directory IST0_DIR as ’C:"’;

--然后我们对这个目录对象进行授权其实这步可以忽略grant read, write on directory IST0_DIR to用户;

--以上前奏完成了! 我们可以写PLSQL进行操作文件了

mysql utl_file_利用UTL_FILE包实现文件I/O操作相关推荐

  1. 利用UTL_FILE包实现文件I/O操作

    摘要:本文主要讨论如何利用Oracle的UTL_FILE包来实现对磁盘文件的I/O操作. 文件I/O对于数据库的开发来说显得很重要,比如如果数据库中的一部分数据来自于磁盘文件,那么就需要使用I/O接口 ...

  2. oracle读写文件--利用utl_file包对磁盘文件的读写操作

    oracle读写文件--利用utl_file包对磁盘文件的读写操作 摘要: 用户提出一个需求,即ORACLE中的一个表存储了照片信息,字段类型为BLOB,要求能导出成文件形式. 本想写个C#程序来做, ...

  3. oracle 导出数据 utl,【原创】利用utl_file包进行表数据导出

    利用utl_file包进行表数据导出 2013/11/12 一.概述 工作中需要将许多表的数据导出到一份excel中,虽然PL/SQL自带有导出的功能,但是导出后需要进行手动的汇总到一张excel中, ...

  4. mysql utl_file_Oracle的UTL_FILE包

    Oracle的包UTL_FIle用于读写操作系统的文件,前提是首先创建Directory对象.授权.然后就可以使用UTL_FILE包中提供的类型.过程. Oracle的包UTL_FIle用于读写操作系 ...

  5. mysql utl_file_Oracle之UTL_FILE 包用法详解

    UTL_FILE包可以用来读写操作系统上的文本文件,UTL_FILE提供了在客户端(FORM等等)和服务器端的文件访问功能. UTL_FILE包可以用来读写操作系统上的文本文件,UTL_FILE提供了 ...

  6. 利用JUZ包实现文件压缩和解压

    压缩解压过程还是用IO流对文件的读写操作 本质还是对API的引用,代码逻辑比较简单,相关注释比较详细,请在代码中查看 代码已跑通,可自行copy测试 注:1. 在压缩文件时,传入的压缩文件路径必须是以 ...

  7. 利用C语言实现文件的读写操作

    这里我利用的是fopen()函数进行操作的,个人认为运用比较简单. fopen函数是打开一个文件,其调用的一般形式为: 文件指针名=fopen(文件名,使用文件方式); 文件名一般都是路径加上文件名 ...

  8. linux文件IO的操作

    资料:http://pan.baidu.com/share/link?shareid=2053803669&uk=2550302069 文件I/O操作open(),close(),read() ...

  9. Java编程的逻辑 (59) - 文件和目录操作

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

最新文章

  1. LoadRunner之二“集合点”
  2. 省钱方便网上手机充话费
  3. 对某自习室系统的一次渗透测试(从iot到getshell再到控制全国自习室)
  4. How is an SAP OData Batch request handled in the backend
  5. Mysql常见的面试总结
  6. 基于Nexys4 DDR的VGA显示图片
  7. Hash(LCP) || 后缀数组 LA 4513 Stammering Aliens
  8. 数据存储(SharedPreferences存储)
  9. leetcode剑指 Offer 63. 股票的最大利润(动态规划)
  10. Jeston TX2安装Ubuntu系统
  11. Android商城开发系列(一)——开篇
  12. Netty线程模型和核心概念
  13. 20年研发管理经验谈(七)
  14. Post与Get传值读取方法
  15. python 环境准备_virtualenvwrapper
  16. 电脑右下角自动弹出窗口(弹窗)
  17. 常用来进行钢结构节点输出的软件是什么_【经验分享】钢结构深化设计BIM应用方法总结...
  18. SpringCloud之Hystrix集群及监控turbine
  19. 魔兽世界个人插件、宏、WA 使用记录
  20. z390 黑苹果启动盘_黑苹果从入门到精通:K39小钢炮黑苹果实践

热门文章

  1. C语言判断日期有效性以及根据年月日输出星期几
  2. java版我的世界怎么疾跑,Minecraft疾跑按键设置 我的世界怎么开疾跑
  3. 苹果手机点击事件无效的解决办法
  4. Java8新特性LocalDateTime获取年,月,周,当年第X周
  5. 电量监测程序 c语言,基于单片机的电量检测系统设计方案.doc
  6. Vue修改更新data数据
  7. 什么是大数据?什么是数据科学
  8. 主要电商模式 B2B C2C B2C C2B O2O F2C B2B2C
  9. vb如何调用计算机日历,VB日历代码.doc
  10. skywalking agent 导致内存泄漏的一些问题