`
forgetOneself
  • 浏览: 59222 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Oracle内建包UTL_FILE使用说明(转载)

阅读更多
Oracle内建包UTL_FILE使用说明(转载) 


作者:loveflying000 提交日期:2007-12-23 16:06:00  

  FOPEN
  IS_OPEN
  GET_LINE
  PUT
  NEW_LINE
  PUT_LINE
  PUTF
  FFLUSH
  FCLOSE
  FCLOSE_ALL
  
  UTL_FILE.FOPEN 用法
  FOPEN会打开指定文件并返回一个文件句柄用于操作文件。
  所有PL/SQL版本: Oracle 8.0版及以上:
   FUNCTION UTL_FILE.FOPEN ( FUNCTION UTL_FILE.FOPEN (
   location IN VARCHAR2, location IN VARCHAR2,
   filename IN VARCHAR2, filename IN VARCHAR2,
   open_mode IN VARCHAR2) open_mode IN VARCHAR2,
   RETURN file_type; max_linesize IN BINARY_INTEGER)
   RETURN file_type;
  
  参数
  
  location
   文件地址
  
  filename
   文件名
  
  openmode
   打开文件的模式(参见下面说明)
  
  max_linesize
  文件每行最大的字符数,包括换行符。最小为1,最大为32767
  
  3种文件打开模式:
  R 只读模式。一般配合UTL_FILE的GET_LINE来读文件。
  W 写(替换)模式。文件的所有行会被删除。PUT, PUT_LINE, NEW_LINE, PUTF和FFLUSH都可使用
  A 写(附加)模式。原文件的所有行会被保留。在最末尾行附加新行。PUT, PUT_LINE, NEW_LINE, PUTF和FFLUSH都可使用
  
  打开文件时注意以下几点:
  文件路径和文件名合起来必须表示操作系统中一个合法的文件。
  文件路径必须存在并可访问;FOPEN并不会新建一个文件夹。
  如果你想打开文件进行读操作,文件必须存在;如果你想打开文件进行写操作,文件不存在时,会新建一个文件。
  如果你想打开文件进行附加操作,文件必须存在。A模式不同于W模式。文件不存在时,会抛出INVALID_OPERATION异常。
  
  FOPEN 会抛出以下异常
  UTL_FILE.INVALID_MODE
  UTL_FILE.INVALID_OPERATION
  UTL_FILE.INVALID_PATH
  UTL_FILE.INVALID_MAXLINESIZE
  
  UTL_FILE.IS_OPEN用法
  如果文件句柄指定的文件已打开,返回TRUE,否则FALSE
  
  FUNCTION UTL_FILE.IS_OPEN (file IN UTL_FILE.FILE_TYPE) RETURN BOOLEAN;
  
  UTL_FILE只提供一个方法去读取数据:GET_LINE
  
  UTL_FILE.GET_LINE用法
  读取指定文件的一行到提供的缓存。
  PROCEDURE UTL_FILE.GET_LINE
   (file IN UTL_FILE.FILE_TYPE,
   buffer OUT VARCHAR2);
  
  file
  由FOPEN返回的文件句柄
  
  buffer
   读取的一行数据的存放缓存
  
  buffer必须足够大。否则,会抛出VALUE_ERROR 异常。行终止符不会被传进buffer。
  
  异常
  NO_DATA_FOUND
  VALUE_ERROR
  UTL_FILE.INVALID_FILEHANDLE
  UTL_FILE.INVALID_OPERATION
  UTL_FILE.READ_ERROR
  
  
  UTL_FILE.PUT用法
  在当前行输出数据
  PROCEDURE UTL_FILE.PUT
   (file IN UTL_FILE.FILE_TYPE,
   buffer OUT VARCHAR2);
  file
  由FOPEN返回的文件句柄
  buffer
  包含要写入文件的数据缓存;Oracle8.0.3及以上最大允许32kB,早期版本只有1023B
  
  UTL_FILE.PUT输出数据时不会附加行终止符。
  
  UTL_FILE.PUT会产生以下异常
  UTL_FILE.INVALID_FILEHANDLE
  UTL_FILE.INVALID_OPERATION
  UTL_FILE.WRITE_ERROR
  
  UTL_FILE.NEW_LINE
  在当前位置输出新行或行终止符,必须使用NEW_LINE来结束当前行,或者使用PUT_LINE输出带有行终止符的完整行数据。
  
  PROCEDURE UTL_FILE.NEW_LINE
   (file IN UTL_FILE.FILE_TYPE,
   lines IN NATURAL := 1);
  file
  由FOPEN返回的文件句柄
  lines
  要插入的行数
  
  如果不指定lines参数,NEW_LINE会使用默认值1,在当前行尾换行。如果要插入一个空白行,可以使用以下语句:
  UTL_FILE.NEW_LINE (my_file, 2);
  如果lines参数为0或负数,什么都不会写入文件。
  
  NEW_LINE会产生以下异常
  VALUE_ERROR
  UTL_FILE.INVALID_FILEHANDLE
  UTL_FILE.INVALID_OPERATION
  UTL_FILE.WRITE_ERROR
  例子
  如果要在UTL_FILE.PUT后立刻换行,可以如下例所示:
  PROCEDURE add_line (file_in IN UTL_FILE.FILE_TYPE, line_in IN VARCHAR2)
  IS
  BEGIN
   UTL_FILE.PUT (file_in, line_in);
   UTL_FILE.NEW_LINE (file_in);
  END;
  
  
  UTL_FILE.PUT_LINE
  输出一个字符串以及一个与系统有关的行终止符
  PROCEDURE UTL_FILE.PUT_LINE
   (file IN UTL_FILE.FILE_TYPE,
   buffer IN VARCHAR2);
  file
  由FOPEN返回的文件句柄
  buffer
  包含要写入文件的数据缓存;Oracle8.0.3及以上最大允许32kB,早期版本只有1023B
  在调用UTL_FILE.PUT_LINE前,必须先打开文件。
  UTL_FILE.PUT_LINE会产生以下异常
  UTL_FILE.INVALID_FILEHANDLE
  UTL_FILE.INVALID_OPERATION
  UTL_FILE.WRITE_ERROR
  
  例子
  这里利用UTL_FILE.PUT_LINE从表emp读取数据到文件:
  PROCEDURE emp2file
  IS
   fileID UTL_FILE.FILE_TYPE;
  BEGIN
   fileID := UTL_FILE.FOPEN ('/tmp', 'emp.dat', 'W');
  
   /* Quick and dirty construction here! */
   FOR emprec IN (SELECT * FROM emp)
   LOOP
   UTL_FILE.PUT_LINE
   (TO_CHAR (emprec.empno) || ',' ||
   emprec.ename || ',' ||
   ...
   TO_CHAR (emprec.deptno));
   END LOOP;
  
   UTL_FILE.FCLOSE (fileID);
  END;
  PUT_LINE相当于PUT后加上NEW_LINE;也相当于PUTF的格式串"%s\n"。
  
  UTL_FILE.PUTF
  以一个模版样式输出至多5个字符串,类似C中的printf
  
  PROCEDURE UTL_FILE.PUTF
   (file IN FILE_TYPE
   ,format IN VARCHAR2
   ,arg1 IN VARCHAR2 DEFAULT NULL
   ,arg2 IN VARCHAR2 DEFAULT NULL
   ,arg3 IN VARCHAR2 DEFAULT NULL
   ,arg4 IN VARCHAR2 DEFAULT NULL
   ,arg5 IN VARCHAR2 DEFAULT NULL);
  file
  由FOPEN返回的文件句柄
  format
  决定格式的格式串
  argN
  可选的5个参数,最多5个
  
  格式串可使用以下样式
  %s
  在格式串中可以使用最多5个%s,与后面的5个参数一一对应
  \n
  换行符。在格式串中没有个数限制
  %s会被后面的参数依次填充,如果没有足够的参数,%s会被忽视,不被写入文件
  
  UTL_FILE.PUTF会产生以下异常
  UTL_FILE.INVALID_FILEHANDLE
  UTL_FILE.INVALID_OPERATION
  UTL_FILE.WRITE_ERROR
  
  UTL_FILE.FFLUSH
  确保所有数据写入文件。
  PROCEDURE UTL_FILE.FFLUSH (file IN UTL_FILE.FILE_TYPE);
  file
  由FOPEN返回的文件句柄
  
  操作系统可能会缓存数据来提高性能。因此可能调用put后,打开文件却看不到写入的数据。在关闭文件前要读取数据的话可以使用UTL_FILE.FFLUSH。
  典型的使用方法包括分析执行进度和调试纪录。
  UTL_FILE.FFLUSH会产生以下异常
  UTL_FILE.INVALID_FILEHANDLE
  UTL_FILE.INVALID_OPERATION
  UTL_FILE.WRITE_ERROR
  
  UTL_FILE.FCLOSE
  关闭文件
  PROCEDURE UTL_FILE.FCLOSE (file IN OUT FILE_TYPE);
  file
  由FOPEN返回的文件句柄
  
  注意file是一个IN OUT参数,因为在关闭文件后会设置为NULL
  当试图关闭文件时有缓存数据未写入文件,会抛出WRITE_ERROR异常
  
  UTL_FILE.FCLOSE会产生以下异常
  UTL_FILE.INVALID_FILEHANDLE
  UTL_FILE.WRITE_ERROR
  
  UTL_FILE.FCLOSE_ALL
  关闭所有已打开的文件
  PROCEDURE UTL_FILE.FCLOSE_ALL;
  
  在结束程序时要确保所有打开的文件已关闭,可使用FCLOSE_ALL
  也可以在EXCEPTION使用,当异常退出时,文件也会被关闭。
  EXCEPTION
   WHEN OTHERS
  
  THEN
   UTL_FILE.FCLOSE_ALL;
   ... other clean up activities ...
  END;
  
  注意:当使用FCLOSE_ALL关闭所有文件时,文件句柄并不会标记为NULL,使用IS_OPEN会返回TRUE。但是,那些关闭的文件不能执行读写操作(除非你再次打开文件)。
  UTL_FILE.FCLOSE_ALL会产生以下异常
  UTL_FILE.WRITE_ERROR
分享到:
评论

相关推荐

    在oracle9i中设置utl_file_dir参数.txt

    在Oracle 9i数据库系统中,`UTL_FILE_DIR`参数是用于控制PL/SQL程序在执行时可以访问的文件目录的重要配置项。这个参数的设置对于实现数据的读写操作、日志记录以及与其他文件系统的交互至关重要。下面将详细探讨...

    oracle utl_file包的用法

    然而,使用`UTL_FILE`包前,需确保数据库用户拥有足够的操作系统权限,并且在`init.ora`文件中正确配置了`UTL_FILE_DIR`参数。 #### 创建文件目录 在使用`UTL_FILE`之前,必须首先创建一个数据库目录对象。这可以...

    Oracle UTL_FILE的使用

    Oracle学习]ORACLE的UTL_FILE包简析 包UTL_FIle用于读写操作系统的文件,前提是首先创建Directory对象、授权。然后就可以使用UTL_FILE包中提供的类型、过程、函数来读取

    utl_file包介绍

    UTL_FILE 包的工作机制是这样的:首先要使用 FOPEN 函数,将文件的路径、文件名、以及打开模式的参数传入,然后 Oracle 会到 ALL_DIRECTORIES 视图中查看路径是否已经创建。如果路径和文件名均合法,则该文件被打开...

    UTL_FILE用法详解

    `FUNCTION UTL_FILE.GET_LINE (file IN UTL_FILE.FILE_TYPE, line OUT VARCHAR2) RETURN BOOLEAN;` 其中,file 是文件句柄,line 是读取的行内容。如果读取成功,返回 TRUE,否则 FALSE。 其他 UTL_FILE 函数 ----...

    ORACLE使用UTL_FILE记录日志简介

    Oracle数据库系统提供了丰富的内置工具和包,以满足各种复杂的需求,其中之一就是UTL_FILE包,它允许我们在PL/SQL程序中直接操作文件,包括读取、写入和管理文件。这篇博客将深入介绍如何利用UTL_FILE在Oracle中记录...

    oracle中utl_file包读写文件操作实例学习

    Oracle中的UTL_FILE包是一个非常实用的工具,它允许数据库用户在Oracle服务器上进行文件的读写操作。这个包提供了多种函数和过程,使得在PL/SQL中处理文本文件变得简单。下面我们将深入探讨如何使用UTL_FILE进行文件...

    UTL_FILE操作文件代码

    这段代码展示了如何使用Oracle的UTL_FILE包来处理文件的读写操作,并且能够将文件内容存储到数据库的BLOB字段中。下面将对各个部分进行详细解读。 ### UTL_FILE简介 UTL_FILE是Oracle提供的一个用于文件I/O操作的...

    utl_file.txt

    现在建议使用`CREATE DIRECTORY`特性来替代`UTL_FILE_DIR`,这不仅提供了更多的灵活性和细粒度控制,还与Oracle的其他工具保持一致,且可以在不停机的情况下动态维护。 #### 文件所有权与保护 在UNIX系统上,由`...

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

    UTL_TCP是Oracle提供的一种实用程序包,用于处理TCP/IP网络通信。在这个场景中,我们将探讨如何利用UTL_TCP来实现文件的上传功能,尤其是在不同服务器间进行FTP(File Transfer Protocol)操作。 首先,理解UTL_TCP...

    utl_mail_scheduler

    UTL_MAIL是Oracle提供的一个用于发送电子邮件的内置程序包。通过UTL_MAIL,开发人员可以在Oracle环境中轻松实现邮件通知功能,这对于系统监控、错误报告及日常业务处理都非常有用。 ##### 安装与配置UTL_MAIL 1. *...

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

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

    Oracle数据库中业务数据文本导出.pdf

    如果Oracle用户没有对`UTL_FILE_DIR`指定的目录的访问权限,那么UTL_FILE包将无法访问这些目录,操作系统会阻止相应的读写操作。此外,尽管某些操作系统不区分大小写,但在UTL_FILE包中指定的目录与初始化参数文件中...

    UTL-FILE导出使用说明

    UTL_FILE是oracle提供的一个标准的工具包,用来读写文件使用。UTL_FILE的优点是速度快,可以通过plsql 数据块快速将数据库表导出来,字段以逗号分隔(可以自定义)1、需要先授权2、拼接要导出表的字段3、执行plsql...

    UTL_FTP:一个PL / SQL软件包-开源

    总的来说,UTL_FTP是一个强大且灵活的工具,为Oracle数据库用户提供了一种内建的FTP解决方案。通过开源的方式,它促进了技术的共享和创新,使得更多开发者能够利用这个包来解决他们在文件传输方面的需求。同时,理解...

    Oracle P/L SQL实现FTP上传、下载功能

    Oracle P/L SQL实现FTP上传、下载功能,以下是此过程包的头部,包体经常打包处理plb,感兴趣用户可以下载下来。 --Oracle上的FTP功能 Create or Replace Package UTL_FTP AUTHID CURRENT_USER as Type Connection ...

    在oracle9i如何在PL-SQL中读写文件.doc

    在Oracle 9i中使用PL/SQL进行文件读写,需要熟练掌握UTL_FILE包的使用方法,包括如何正确设置参数、处理异常以及编写有效的存储过程。这不仅可以提高数据处理的灵活性,还能增强应用程序的功能性和健壮性。

Global site tag (gtag.js) - Google Analytics