`
JEmql
  • 浏览: 62382 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

利用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;
/

  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的功能。

分享到:
评论

相关推荐

    oralce plsql 使用utl_tcp实现上传文件的功能

    在这个场景中,我们将探讨如何利用UTL_TCP来实现文件的上传功能,尤其是在不同服务器间进行FTP(File Transfer Protocol)操作。 首先,理解UTL_TCP的基础知识至关重要。UTL_TCP是Oracle内置的实用程序包,它提供了...

    PL/SQL解析、生成XML例子

    通常,这样的例子会包含创建XMLType对象,执行XML查询,以及利用UTL_FILE包进行文件操作的过程。读者可以按照说明中的步骤一步步实践,以加深对PL/SQL和XML交互的理解。 总之,PL/SQL解析XML涉及到XMLType数据类型...

    oracle 存储过程,批量产生用

    通过结合使用Oracle存储过程和文件I/O操作,可以有效地批量创建用户,极大地提高了工作效率和准确性。然而,实施此类方案时,必须注意数据库的安全性和性能,确保不会引入安全漏洞或造成不必要的资源消耗。此外,...

    Oracle数据库整理

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

    Oracle PLSQL 编程

    - **文件操作**:通过UTL_FILE包实现文件读写操作。 - **电子邮件发送**:使用UTL_MAIL和UTL_SMTP包发送电子邮件。 - **Web I/O**:利用UTL_HTTP包进行HTTP请求,实现与Web服务的交互。 #### 七、全球化和本地化 - ...

    plsql.zip_plsql_sql_zip

    UTL_FILE是Oracle提供的一个实用程序包,用于在数据库和操作系统文件系统之间进行I/O操作。尽管UTL_FILE不直接支持ZIP格式,但可以借助外部程序(如Java或操作系统命令)来处理ZIP文件,然后在PL/SQL中调用这些程序...

    Oracle.PL.SQL程序设计 第五版 上册

    10. 文件I/O:了解如何使用UTL_FILE包进行文件读写操作,这在某些特定应用场景中非常关键。 11. 连接管理:学习如何在PL/SQL中建立和管理数据库连接,使用DBMS_SESSION等包进行会话管理。 12. 进阶主题:可能涉及...

    oracle 日常維護

    “utl_file plsql.doc”涉及的是Oracle的UTL_FILE包,这是一个PL/SQL接口,允许在数据库中读写操作系统文件,这对于日志记录、数据导入导出等任务非常有用。 “RH4狟Ora9[1].2假蚾摯Standby,RMAN妗囥.doc”讲述了...

    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_plsql_编程详解

    - **UTL_FILE**:文件I/O操作。 #### 结论 PL/SQL作为Oracle数据库的核心编程语言之一,为开发者提供了强大的工具来构建复杂且高性能的应用程序。通过掌握上述基本概念和技术要点,开发者可以更好地利用PL/SQL的...

    Oracle9i的init.ora参数中文说明

    说明: 允许数据库管理员指定 PL/SQL 文件 I/O 许可的目录。使用多个 UTL_FILE_DIR 参数即可指定多个目录。请注意所有用户均可读取或写入 UTL_FILE_DIR 参数中指定的所有文件。 值范围: 任何有效的目录路径。 ...

    ORACLE SQL编程技巧.doc

    9. **utl_file包**:这个Oracle内置包提供对文件的读写操作,可以在SQL*Plus中实现文件上传和下载。 10. **HAVING子句的用法**:HAVING用于聚合查询后的过滤,它与WHERE子句的区别在于HAVING可以过滤聚合函数的结果...

    plsql oracle

    - **UTL_FILE**:用于文件I/O操作。 ### 总结 PL/SQL是Oracle数据库的核心组件之一,通过使用PL/SQL,开发人员可以构建出高性能且功能强大的数据库应用程序。它不仅提供了丰富的编程特性,还允许开发者利用Oracle...

    XLS数据导入至ORACLE

    这需要对Oracle的API如UTL_FILE有一定的了解,以及如何处理文件I/O和数据类型转换。 3. **图形化工具**:对于非开发人员或者不熟悉SQL的用户,可以使用一些图形化工具,如Data Loader for Oracle或Alteryx等,它们...

Global site tag (gtag.js) - Google Analytics