mysql utl_file_利用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;
<>
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操作相关推荐
- 利用UTL_FILE包实现文件I/O操作
摘要:本文主要讨论如何利用Oracle的UTL_FILE包来实现对磁盘文件的I/O操作. 文件I/O对于数据库的开发来说显得很重要,比如如果数据库中的一部分数据来自于磁盘文件,那么就需要使用I/O接口 ...
- oracle读写文件--利用utl_file包对磁盘文件的读写操作
oracle读写文件--利用utl_file包对磁盘文件的读写操作 摘要: 用户提出一个需求,即ORACLE中的一个表存储了照片信息,字段类型为BLOB,要求能导出成文件形式. 本想写个C#程序来做, ...
- oracle 导出数据 utl,【原创】利用utl_file包进行表数据导出
利用utl_file包进行表数据导出 2013/11/12 一.概述 工作中需要将许多表的数据导出到一份excel中,虽然PL/SQL自带有导出的功能,但是导出后需要进行手动的汇总到一张excel中, ...
- mysql utl_file_Oracle的UTL_FILE包
Oracle的包UTL_FIle用于读写操作系统的文件,前提是首先创建Directory对象.授权.然后就可以使用UTL_FILE包中提供的类型.过程. Oracle的包UTL_FIle用于读写操作系 ...
- mysql utl_file_Oracle之UTL_FILE 包用法详解
UTL_FILE包可以用来读写操作系统上的文本文件,UTL_FILE提供了在客户端(FORM等等)和服务器端的文件访问功能. UTL_FILE包可以用来读写操作系统上的文本文件,UTL_FILE提供了 ...
- 利用JUZ包实现文件压缩和解压
压缩解压过程还是用IO流对文件的读写操作 本质还是对API的引用,代码逻辑比较简单,相关注释比较详细,请在代码中查看 代码已跑通,可自行copy测试 注:1. 在压缩文件时,传入的压缩文件路径必须是以 ...
- 利用C语言实现文件的读写操作
这里我利用的是fopen()函数进行操作的,个人认为运用比较简单. fopen函数是打开一个文件,其调用的一般形式为: 文件指针名=fopen(文件名,使用文件方式); 文件名一般都是路径加上文件名 ...
- linux文件IO的操作
资料:http://pan.baidu.com/share/link?shareid=2053803669&uk=2550302069 文件I/O操作open(),close(),read() ...
- Java编程的逻辑 (59) - 文件和目录操作
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
最新文章
- LoadRunner之二“集合点”
- 省钱方便网上手机充话费
- 对某自习室系统的一次渗透测试(从iot到getshell再到控制全国自习室)
- How is an SAP OData Batch request handled in the backend
- Mysql常见的面试总结
- 基于Nexys4 DDR的VGA显示图片
- Hash(LCP) || 后缀数组 LA 4513 Stammering Aliens
- 数据存储(SharedPreferences存储)
- leetcode剑指 Offer 63. 股票的最大利润(动态规划)
- Jeston TX2安装Ubuntu系统
- Android商城开发系列(一)——开篇
- Netty线程模型和核心概念
- 20年研发管理经验谈(七)
- Post与Get传值读取方法
- python 环境准备_virtualenvwrapper
- 电脑右下角自动弹出窗口(弹窗)
- 常用来进行钢结构节点输出的软件是什么_【经验分享】钢结构深化设计BIM应用方法总结...
- SpringCloud之Hystrix集群及监控turbine
- 魔兽世界个人插件、宏、WA 使用记录
- z390 黑苹果启动盘_黑苹果从入门到精通:K39小钢炮黑苹果实践
热门文章
- C语言判断日期有效性以及根据年月日输出星期几
- java版我的世界怎么疾跑,Minecraft疾跑按键设置 我的世界怎么开疾跑
- 苹果手机点击事件无效的解决办法
- Java8新特性LocalDateTime获取年,月,周,当年第X周
- 电量监测程序 c语言,基于单片机的电量检测系统设计方案.doc
- Vue修改更新data数据
- 什么是大数据?什么是数据科学
- 主要电商模式 B2B C2C B2C C2B O2O F2C B2B2C
- vb如何调用计算机日历,VB日历代码.doc
- skywalking agent 导致内存泄漏的一些问题