ORACLE之UTL_FILE包详解
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 会抛出以下异常:
(1)UTL_FILE.INVALID_MODE
(2)UTL_FILE.INVALID_OPERATION
(3)UTL_FILE.INVALID_PATH
(4)UTL_FILE.INVALID_MAXLINESIZE
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
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_FILEHANDLE
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);
3.10 FCLOSE_ALL()
函数作用:关闭所有文件
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
源文件中最后一行要拷贝文本的行号。如果省略这个参数或者这个参数为空,那么就一直拷贝到文件中最后一行。
ORACLE之UTL_FILE包详解的更多相关文章
- Oracle中dbms_random包详解
Oracle之DBMS_RANDOM包详解参考自:https://www.cnblogs.com/ivictor/p/4476031.html https://www.cnblogs.com/shen ...
- Oracle之DBMS_RANDOM包详解
DBMS_RANDOM是Oracle提供的一个PL/SQL包,用于生成随机数据和字符.它具有以下函数. 其中,initialize,random,terminate函数在Oracle11g中已不推荐使 ...
- Oracle dbms_random随机数包详解
Oracle dbms_random包主要用于获得随机数,可以为数字也可以为字母等,还可以实现混拼.常用函数如下: dbms_random.value 生成一个指定范围的38位随机小数(小数点后38位 ...
- [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)
原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...
- oracle中imp命令详解 .
转自http://www.cnblogs.com/songdavid/articles/2435439.html oracle中imp命令详解 Oracle的导入实用程序(Import utility ...
- ORACLE PL/SQL编程详解
ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...
- 常见 jar包详解
常见 jar包详解 jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实例化.单件的生命周期 ...
- 【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航
原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人 ...
- [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)
原文:[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) [推荐]ORACLE PL/SQL编程详解之一: PL/SQL 程序设计简介(千里之行,始于足下 ...
随机推荐
- ajax执行完成后,再执行下面的代码的解决办法
一般ajax设置的都是异步的,但是有时候我们有这种需求,就是等ajax执行完成之后,在执行下面的函数. 1设置async:false 在jq中直接设置了ajax是异步的还是同步的 一般如果不写这个,默 ...
- 使用percona-xtrabackup实现对线上zabbix监控系统数据库mariadb5.5.47的主从同步
使用percona-xtrabackup实现对线上zabbix监控系统数据库的主从同步 业务背景: zabbix3.0.4是业务的主要监控,部署在一台单机中,为避免数据丢失先对其做数据主从同步,因主数 ...
- 返回记录结构时,如果需要返回为nil时 应该怎么办。
- 【229】Raster Calculator - 栅格计算器
参考:分段函数进行复制,利用语句 参考:ArcGIS栅格计算器 - CSDN 参考:ArcGIS栅格计算器con条件函数使用 参考:ArcGIS栅格计算器 - 电脑玩物 ("lyr" ...
- 真机在wifi下调试android程序
大家好,最近在学习android程序由于手机接口问题,调试程序的时候老是接触不良而不能正常调试,因此感到相当苦恼,于是在网上查找无线调试android的方法.经过研究和尝试现已成功无线调试程序,方法分 ...
- 英语语法 It all started the summer before second grade when our moving van pulled into her neighborhood
It all started the summer before second grade when our moving van pulled into herneighborhood It all ...
- Ruby-Array数组
1.创建数组 a=Array.new(6,obj=nil) #=> [nil, nil, nil, nil, nil, nil] 设置默认值 a=Array.new(6) ...
- phpmyadmin
下载地址:https://www.phpmyadmin.net/ 详情:http://baike.baidu.com/link?url=OIngLv0mpiYTZl_sCEmryWkHgUYqZeHr ...
- S2 第二本书 深入.NET平台和C#编程 总结 by天命
第一章 深入.NET框架 .NET框架 包含 CLR公共语言运行时 FCL框架类库 CLR(Common Language Runtime)公共语言运行时 CLS(Common Language Sp ...
- LVS集群类型
一.LVS-NAT 简述:多目标的DNAT,通过Director修改请求报文中的目标地址和端口为LVS挑选出来的某RS的RIP和PORT实现转发 特点: (1)RIP和DIP必须在同一网络,且应该使用 ...