1 Utl_File包简介
Oracle的UTL_FILE包用来实现对磁盘文件的I/O操作。

(1)Oracle10g之前的版本需要指定utl_file包可以操作的目录。
方法:
1、alter system set utl_file_dir=’e:/utl’ scope=spfile;
2、在init.ora文件中,配置如下:UTL_FILE=E:/utl或者UTL_FILE_DIR=E:/utl;

(2)Oracle10g之后的版本,只需要先创建一个路径即可。

2 Utl_file包的依赖关系
SELECT name FROM dba_dependencies WHERE referenced_name = ‘UTL_FILE’
UNION
SELECT referenced_name FROM dba_dependencies WHERE name = ‘UTL_FILE’;

3 UTL_FILE常用方法
3.1 FOPEN()
英文解释:

(1) Open a file for read operations

FOPEN会打开指定文件并返回一个文件句柄用于操作文件。

utl_file.fopen(
file_location IN VARCHAR2,  --路径
file_name     IN VARCHAR2,   --文件名称
open_mode     IN VARCHAR2,   --打开模式 R 读 W 写 A 追加
max_linesize  IN BINARY_INTEGER DEFAULT NULL)
RETURN file_type;

参数
location 文件地址
filename 文件名
openmode 打开文件的模式(参见下面说明)
3种文件打开模式:
(1)R 只读模式。一般配合UTL_FILE的GET_LINE来读文件。
(2)W 写(替换)模式。文件的所有行会被删除。
PUT, PUT_LINE, NEW_LINE, PUTF和FFLUSH都可使用。
(3)A 写(附加)模式。原文件的所有行会被保留。在最末尾行附加新行。
PUT, PUT_LINE, NEW_LINE, PUTF和FFLUSH都可使用
max_linesize 文件每行最大的字符数,包括换行符。最小为1,最大为32767。

打开文件时注意以下几点:
* 文件路径和文件名合起来必须表示操作系统中一个合法的文件。
* 文件路径必须存在并可访问;FOPEN并不会新建一个文件夹。
* 如果你想打开文件进行读操作,文件必须存在;如果你想打开文件进行写操作,文件不存在时,会新建一个文件。
* 如果你想打开文件进行附加操作,文件必须存在。A模式不同于W模式。文件不存在时,会抛出INVALID_OPERATION异常。
* FOPEN 会抛出以下异常
UTL_FILE.INVALID_MODE
UTL_FILE.INVALID_OPERATION
UTL_FILE.INVALID_PATH
UTL_FILE.INVALID_MAXLINESIZE

测试用例

DECLAREv_output  utl_file.file_type;v_contxt  VARCHAR2(250);v_pathna varchar2(10);
BEGINv_pathna := 'utl_file_dir';v_output:= utl_file.fopen(v_pathna, 'test.txt', 'R');LOOPBEGINutl_file.get_line(v_output, v_contxt);dbms_output.put_line(v_contxt);EXCEPTIONWHEN OTHERS THENEXIT;END;END LOOP;utl_file.fclose(v_output);
END ;

(2) Open A File For Write Operations
:= utl_file.fopen(‘W’)

3.2 IS_OPEN()
英文解释:Returns True If A File Handle Is Open: Otherwise False
utl_file.is_open(file IN FILE_TYPE) RETURN BOOLEAN;
3.3 GET_LINE()
英文解释:Read a Line from a file
用法:
utl_file.getline(
file IN FILE_TYPE,
buffer OUT VARCHAR2,
len IN BINARY_INTEGER DEFAULT NULL);
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
–测试用例

DECLAREv_output utl_file.file_type;v_lntext VARCHAR2(250);v_pathna VARCHAR2(200);v_sql    VARCHAR2(255);
BEGINv_pathna := 'UTL_FILE_DIR';v_output := utl_file.fopen('UTL_FILE_DIR', 'test.txt', 'W');FOR cour_b IN (SELECT a.owner || ',' || a.object_name || ',' ||a.object_type || ',' || a.status AS column_textFROM dba_objects aWHERE a.owner = 'SCOTT') LOOPv_sql := cour_b.column_text;utl_file.putf(v_output, v_sql);dbms_output.put_line(v_sql);END LOOP;IF (utl_file.is_open(v_output)) THENdbms_output.put_line('文件已经打开了');--utl_file.put(v_output, 'aaaaaaaa');ELSEdbms_output.put_line('文件关闭');END IF;/* LOOPBEGINutl_file.get_line(v_output, v_lntext);dbms_output.put_line(v_lntext);EXCEPTIONWHEN OTHERS THENEXIT;END;END LOOP;*/utl_file.fclose(v_output);
END fopen;

3.4 PUT()
英文解释:Writes a string to a file
用法:
utl_file.put(file IN FILE_TYPE, buffer IN VARCHAR2);
函数原型:
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.INVALID_FILEHANDLE
UTL_FILE.INVALID_OPERATION
UTL_FILE.WRITE_ERROR
3.5 NEW_LINE()
英文解释:Writes one or more operating system-specific line terminators to a file
用法:
utl_file.new_line(file IN FILE_TYPE, lines IN NATURAL := 1);
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或负数,什么都不会写入文件。
异常:
VALUE_ERROR
UTL_FILE.INVALID_FILEHANDLE
UTL_FILE.INVALID_OPERATION
UTL_FILE.WRITE_ERROR
3.6 PUT_LINE()
英文解释:Writes a line to a file. Appends an operating system-specific line terminator
用法:
utl_file.put_line(
file IN FILE_TYPE,
buffer IN VARCHAR2,
autoflush IN BOOLEAN DEFAULT FALSE);
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.INVALID_FILEHANDLE
UTL_FILE.INVALID_OPERATION
UTL_FILE.WRITE_ERROR
3.7 PUTF()
英文解释:A PUT procedure with formatting
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);
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个参数一一对应
%s会被后面的参数依次填充,如果没有足够的参数,%s会被忽视,不被写入文件
n 换行符。在格式串中没有个数限制
异常:
UTL_FILE.INVALID_FILEHANDL
UTL_FILE.INVALID_OPERATION
UTL_FILE.WRITE_ERROR
3.8 PUT_RAW ()
英文解释:Accepts as input a RAW data value and writes the value to the output buffer
用法:
utl_file.put_raw(
file IN file_type,
buffer IN RAW,
autoflush IN BOOLEAN DEFAULT FALSE);
3.9 FCLOSE()
函数作用:关闭命名的文件:
utl_file.fclose(file IN OUT file_type);
utl_file.fclose(file IN OUT file_type);
3.10 FCLOSE_ALL()
函数作用:关闭所有文件
DECLARE
v_output utl_file.file_type;
vouthandle utl_file.file_type;
BEGIN
v_output := utl_file.fopen(v_pathna, ‘test.txt’, ‘R’);
vouthandle := utl_file.fopen(v_pathna, ‘out.txt’, ‘W’);
IF utl_file.is_open(v_output) THEN
utl_file.fclose_all;
dbms_output.put_line(‘Closed All’);
END IF;
END fopen;
3.11 FRENAME()
英文解释:Rename An Operating System File
utl_file.frename (
src_location IN VARCHAR2,
src_filename IN VARCHAR2,
dest_location IN VARCHAR2,
dest_filename IN VARCHAR2,
overwrite IN BOOLEAN DEFAULT FALSE);
BEGIN
utl_file.frename(v_pathna, ‘test.txt’, v_pathna, ‘x.txt’, TRUE);
END frename;
/
存储过程FRENAME修改一个文件的名称,这样我们可以把一个文件从一个位置移动到另外一个位置。
函数原型:
FRENAME(location VARCHAR2,
filename VARCHAR2,
dest_dir VARCHAR2,
dest_file VARCHAR2,
[ overwrite BOOLEAN ])
参数:
location
目录名称,存放在pg_catalog.edb_dir.dirname中,这个目录包含要改名的文件。
filename
要改名的源文件名称。
dest_dir
目录名称,存放在pg_catalog.edb_dir.dirname中,这个目录是被改名文件所在的目录。
dest_file
原始文件的新名称。
overwrite
如果设置为”true”,在dest_dir目录中覆盖任何名为dest_file的文件。若设置为”false”,就会产生异常。这是缺省情况。
3.12 FREMOVE()
英文解释:Delete An Operating System File
utl_file.fremove(location IN VARCHAR2, filename IN VARCHAR2);
– dump.txt is created in the FCOPY demo
BEGIN
utl_file.fremove(v_pathna, ‘dump.txt’);
END fremove;
/
3.13 FFLUSH()
英文解释:Physically writes pending data to the file identified by the file handle
用法:
utl_file.fflush(file IN file_type);
函数原型:
PROCEDURE UTL_FILE.FFLUSH (file IN UTL_FILE.FILE_TYPE);
参数说明:
file 由FOPEN返回的文件句柄
注意:
操作系统可能会缓存数据来提高性能。因此可能调用put后,打开文件却看不到写入的数据。在关闭文件前要读取数据的话可以使用UTL_FILE.FFLUSH。
典型的使用方法包括分析执行进度和调试纪录。
异常:
UTL_FILE.INVALID_FILEHANDLE
UTL_FILE.INVALID_OPERATION
UTL_FILE.WRITE_ERROR
3.14 FCOPY()
英文解释:Copies a contiguous portion of a file to a newly created file
utl_file.fcopy(
src_location IN VARCHAR2,
src_filename IN VARCHAR2,
dest_location IN VARCHAR2,
dest_filename IN VARCHAR2,
start_line IN BINARY_INTEGER DEFAULT 1,
end_line IN BINARY_INTEGER DEFAULT NULL);
BEGIN
utl_file.fcopy(v_pathna, ‘test.txt’, v_pathna, ‘dump.txt’);
END;
UTL_FILE.FCOPY
存储过程FCOPY把一个文件中文本拷贝到另外一个文件中。
函数原型:
FCOPY(location VARCHAR2, filename VARCHAR2,dest_dir VARCHAR2, dest_file VARCHAR2[, start_line PLS_INTEGER [, end_line PLS_INTEGER ] ])
参数
location
表示目录名称,存放在pg_catalog.edb_dir.dirname中,这个目录包含要拷贝的文件。
filename
要拷贝文件的名称。
dest_dir
表示目录名称,存放在pg_catalog.edb_dir.dirname中,是源文件要拷贝到目的目录。
dest_file
目标文件的名称。
start_line
源文件中文本行号,用于指定开始拷贝的位置。缺省值是1。
end_line
源文件中最后一行要拷贝文本的行号。如果省略这个参数或者这个参数为空,那么就一直拷贝到文件中最后一行。

UTL_FILE包详解相关推荐

  1. oracle utl_file fcopy,ORACLE之UTL_FILE包详解

    1 Utl_File包简介 Oracle的UTL_FILE包用来实现对磁盘文件的I/O操作. (1)Oracle10g之前的版本需要指定utl_file包可以操作的目录. 方法: 1.alter sy ...

  2. oracle utl file putf,UTL_FILE包详解(第二篇)

    3.4 PUT() 英文解释:Writes astringtoafile 用法: utl_file.put(file IN FILE_TYPE, buffer IN); 函数原型: PROCEDURE ...

  3. android jar 包 意见反馈功能,android重点jar包详解.docx

    android重点jar包详解 深入理解View(一):从setContentView谈起 我们都知道?MVC,在Android中,这个?V?即指View,那我们今天就来探探View的究竟.在onCr ...

  4. java axis2 jar_Java axis2.jar包详解及缺少jar包错误分析

    Java  axis2.jar包详解及缺少jar包错误分析 一.最小开发jar集 axis2 开发最小jar包集: activation-1.1.jar axiom-api-1.2.13.jar ax ...

  5. spring2.0和spring2.5及以上版本的jar包区别 spring jar 包详解

    spring jar 包详解 spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了 spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环 ...

  6. 【spring】jar包详解与模块依赖关系

    以spring3.X为例 jar包详解 1. spring-core.jar:包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心: 2. spri ...

  7. spring-jar包详解整理

    Spring各jar包详解 spring.jar 是包含有完整发布模块的单个jar 包.但是不包括mock.jar,aspects.jar, spring-portlet.jar, and sprin ...

  8. java axis2 jar_Java axis2.jar包详解及缺少jar包错误分析

    Java  axis2.jar包详解及缺少jar包错误分析 一.最小开发jar集 axis2 开发最小jar包集: activation-1.1.jar axiom-api-1.2.13.jar ax ...

  9. Spring Boot的每个模块包详解

    Spring Boot的每个模块包详解,具体如下: 1.spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. 2.spring-boot-s ...

最新文章

  1. NLP命名实体识别(NER)代码实践
  2. 质数c语言欧拉筛选,Python|欧拉筛法求质数
  3. The application server could not be contacted
  4. java 使用本机代理_Java与本机代理–他们所做的强大功能
  5. 唯一的hashCodes不足以避免冲突
  6. linux bin su,linux – su:/ bin / bash:资源暂时不可用
  7. Java运算符(Operator)之 算数运算符(ArithmeticOperator)
  8. SQL2008附加数据库只读怎么修改
  9. C++---static关键字
  10. linux yum被占用
  11. 不同VPC路由器通过静态路由、动态路由(OSPF)实现网络互通实战
  12. 角点 python实现_100行代码,带你玩转OpenCV-Python基础API
  13. 什么是信用评分分析?
  14. 对同一元素设置overflow-x:hidden,overflow-y:visible;属性值不生效
  15. 游戏策划入门教程(1)工具篇
  16. pdf转换器下载使用步骤
  17. 简易nginx load balance示例
  18. 层次分析法java_AHP层次分析法java实现
  19. SpringBoot的@Value注解设置默认值
  20. godaddy plesk mysql 连接 2014_GoDaddy Plesk主机安装Discuz论坛需要注意的问题 | Godaddy美国主机中文指南...

热门文章

  1. 本地登录切断远程连接的简单方法
  2. 数据库 SQL Server 检测到基于一致性的逻辑 I/O 错误 页撕裂 执行 读取 期间,发生了该错误 恢复
  3. Python openpyxl 蔬菜价格明细表变动
  4. Content type 'multipart/form-data;boundary=--------------------------258075776767858126421870;chars
  5. Pta题目集: 电话聊天狂人 (25 分)
  6. International English Language Testing System - IELTS - 雅思
  7. 我的世界Java超级指令_我的世界空气方块指令(附:删除大量方块攻略)
  8. 我的世界java萌新须知_我的世界新手入门攻略 萌新前期注意事项
  9. Vue-cli构建步骤
  10. 图像处理——人脸黑头检测+用户界面