二十一、utl_file(用于读写OS文件)
1、概述
作用:用于读写OS文件.使用该包访问OS文件时,必须要为OS目录建立相应的DIRECTORY对象..当用户要访问特定目录下的文件时,必须要具有读写DIRECTORY对象的权限.在使用UTL_FILE包之前,应首先建立DIRECTORY对象.
2、包的组成
1)、file_type
作用:该类型是utl_file包中所定义的记录类型,其成员是私有的,不能被直接引用。
该类型的定义如下:
type file_type is record(is binary_integer,datatype binary_integer);
2)、fopen
作用:用于打开OS文件。注意,使用该函数最多可以同时打开50个文件
语法:file_type.fopen(
location in varchar2,filename in varchar2,
open_mode in varchar2,max_linesize in binary_integer) return file_type;
说明:当成功执行后会返回文件句柄,访问该文件可以直接使用文件句柄。
如果执行失败会触发异常或显示错误。注意当指定文件位置时必须要使用directory对象,且其名称必须大写。
3)、fopen_nchar
作用:用于以unicode方式打开文件。当使用该函数打开文件后,读写文件会使用unicode取代数据库字符集。
语法:utl_file.fopen_nchar(
location in varchar2,
filename in varchar2,
open_mode in varchar2
max_linesize in binary_integer) return file_type;
4)、is_open
作用:用于确定文件是否已经打开
语法:utl_file.is_open(file in file_type) return boolean;
其中file指定文件句柄,如果文件已经被打开返回true,否则返回false。
5)、fclose
作用:用于关闭已经打开的文件
语法:utl_file.fclose(file in out file_type);
6)、fclose_all
作用:用于关闭当前会话打开的所有文件
语法:utl_file.fclose_all;
7)、get_line
作用:用于从已打开文件中读取行内容,行内容会被读取到输出缓冲区
语法:utl_file.get_line(file in file_type,buffer out varchar2,
linesize in number,len in pls_integer default null);
其中buffer用于存储读取信息,linesize指定要读取的最大字节输,len指定实际读取长度。
8)、get_line_nchar
作用:用于以unicode方式读取已打开文件的行内容,并且将行内容读取到输出缓冲区。
语法:utl_file.get_line_nchar(file in file_type,buffer out varchar2,
len in pls_integer default null);
9)、get_raw
作用:用于从文件中读取raw字符串,并调节文件指针到读取位置。
语法:utl_file.get_raw(fid in utl_file.file_type,r out nocopy raw,
len in pls_integer default null);
10)、put
作用:用于将缓冲区内容写入到文件中,当使用put过程时文件必须要以写方式打开。
在写入缓冲区内容后如果要结束行,可以用new_line过程。
语法:utl_file.put(file in file_type,buffer in varchar2);
11)、put_nchar
作用:用于将缓冲区内容以unicode方式写入到文件。
语法:utl_file.put_nchar(file in file_type,buffer in varchar2);
12)、put_raw
作用:用于将raw缓冲区中的数据写入到OS文件。
语法:utl_file.put_raw(fid in utl_file.file_type,r in raw,
autoflush in boolean default false);
其中fid指定文件句柄,r指定存放raw数据的缓冲区,autoflush指定是否要自动刷新缓冲区数据。
13)、new_line
作用:用于为文件增加行终止符。
语法:utl_file.new_line(file in file_type,lines in natural:=1);
其中lines指定要增加的行终止符个数。
14)、put_line
作用:用于将文本缓冲区内容写入到文件中。当使用该过程为文本追加内容时会自动在内容的尾部追加终止符。
语法:utl_file.put_line(file in file_type,buffer in varchar2,
autoflush in boolean default false);
15)、put_line_nchar
作用:用于将文本缓冲区内容以unicode方式写入文件。自动在尾部追加终止符。
语法:utl_file.put_line_nchar(file in file_type,buffer in varchar2);
16)、putf
作用:用于以特定格式将文本内容写入到OS文件,其中格式符%s表示字符串,格式符\n表示行终止符。
语法:utl_file.putf(file in file_type,format in varchar2
[,arg1 in varchar2 default null,...arg5 in varchar2 default null]);
其中format指定格式符(最多5个%s),arg1...arg5指定对应格式符的字符串。
17)、putf_nchar
作用:用于以特定格式将文本内容以unicode的方式写入到OS文件,其中格式符%s表示字符串,格式符\n表示行终止符。
语法:utl_file.putf_nchar(file in file_type,format in varchar2
[,arg1 in varchar2 default null,...arg5 in varchar2 default null]);
其中format指定格式符(最多5个%s),arg1...arg5指定对应格式符的字符串。
18)、fflush
作用:用于将数据强制性写入到OS文件。正常情况下当给文件写入数据时,
数据会被暂时存放在缓冲中,过程fflush用于强制将数据写入到OS文件中。
语法:utl_file.fflush(file in file_type);
19)、fseek
作用:用于移动文件指针到特定位置。既可以指定文件指针的绝对位置,也可以指定文件指针的相对位置。
语法:utl_file.fseek(
fid in utl_file.file_type,absolute_offset in pl_integer default null,
relative_offset in pls_integer default null);
其中absolute_offset指定文件指针的绝对位置(单位:字节),
relative_offset指定文件指针的相对位置(单位:字节)。
20)、fremove
作用:用于删除磁盘文件
语法:utl_file.fremove(location in varchar2,filename in varchar2);
其中location指定directory对象(必须大写),filename指定要删除的OS文件名。
21)、fcopy
作用:用于将源文件的全部或部分内容复制到目标文件中。如果不设置起始行和结束行则复制文件所有内容。
语法:utl_file.fcopy(location ni varcahr2,
filename in varchar2,
dest_dir in varchar2,
dest_file in varchar2,
start_line in pls_integer default 1,
end_line in pls_integer default null);
其中location指定源文件所在目录对应的directory对象,filename指定源文件名,
dest_dir指定目标文件所在目录对应的directory对象,dest_file指定目标文件的名字,
start_line指定起始行号,end_line指定结束行号。
例子:exec utl_file.fcopy('USER_DIR','a.txr','USER_DIR','c.txt');
22)、fgetpos
作用:返回文件指针所在的偏移位置。
语法:utl_file.fgetpos(fileid in file_type) return pls_integer;
23)、fgetattr
作用:用于读取磁盘文件,并返回文件属性
语法:utl_file.fgetattr(location in varchar2,filename in varchar2,
exists out boolean,file_length out number,blocksize out number)
其中location指定OS目录所对应的directory对象,filename指定OS文件名,
exists确定文件是否存在,file_length取得文件长度,blocksize取得OS块的尺寸。
24)、frename
作用:用于修改已存在的OS文件名,其作用与unix的mv命令完全相同。
在修改文件名时,通过指定overwrite参数,可以覆盖已存在的文件。
语法:utl_file.frename(location in varchar2,filename in varchar2,dest_dir in varchar2,
dest_file in varchar2,overwrite in boolean default false);
其中overwrite指定是否要覆盖已存在文件(false:不能覆盖,true:覆盖)。
例子:exec utl_file.frename('USER_DIR','d.txt','USER_DIR','c.txt');
3、综合例子
declare
handle utl_file.file_type;
buffer varchar2(100);
buffer1 raw(100);
fileexist boolean;
filelen int;
os_block int;
begin
--is_open
if not utl_file.is_open(handle) then
--fopen
bandle:=utl_file.fopen('user_dir','readme.txt','r',1000);
end if;
dbms_output.put_line('打开文件成功');
--get_line
utl_file.get_line(handle,buffer,100);
dbms_output.put_line(buffer);
utl_file.fclose(handle);
--get_line_nchar
handle:=utl.file.fopen_nchar('USER_DIR','a.txt'.'r',1000);
utl_file.get_line_nchar(bandle.buffer);
dbms_output.put_line(buffer);
utl_file.fclose(handle);
--get_raw
handle:=utl_file.fopen('USER_DIR','a.txt'.'r',1000);
utl_file.get_raw(handle,buffer1,100);
dbms_output.put_line(buffer1);
utl_file.fclose(handle);
--put
handle:=utl_file.fopen('USER_DIR','b.txt'.'w',1000);
buffer:='中华';
utl_file.put(handle,buffer);
utl_file.new_line(handle);
buffer:='中国';
utl_file.put_line(handle,buffer);
utl_file.fclose(handle);
--put_nchar
handle:=utl_file.fopen('USER_DIR','b.txt'.'w',1000);
buffer:='中华';
utl_file.put(handle,buffer);
utl_file.new_line(handle);
buffer:='中国';
utl_file.put_line_nchar(handle,buffer);
utl_file.fclose(handle);
--put_raw
handle:=utl_file.fopen('USER_DIR','b.txt'.'w',1000);
buffer:='01f3d5a4c7d8';
utl_file.put_raw(handle,buffer);
utl_file.new_line(handle);
utl_file.fclose(handle);
--putf
handle:=utl_file.fopen('USER_DIR','b.txt'.'w',1000);
utl_file.putf(handle,'%s\n%s\n%s\n','历史','文明','万岁');
utl_file.fclose(handle);
--fseek
bandle:=utl_file.fopen('USER_DIR','a.txt','r');
dbms_output.put_line('文件指针起始位置:'||utl_file.fgetpos(handle));
utl_file.fseek(handle,20);
dbms_output.put_line('文件指针起当前位置:'||utl_file.fgetpos(handle));
utl_file.fclose(handle);
--fgetattr
utl_file.fgetatttr('USER_DIR','readme.txt',fileexist,filelen,os_block);
if fileexist then
dbms_output.put_line('文件尺寸:'||filelen);
dbms_output.put_line('OS块尺寸:'||os_block);
end if;
end;
二十一、utl_file(用于读写OS文件)的更多相关文章
- Linux系统学习 二十一、SAMBA服务—相关文件、配置文件详解
3.相关文件 常用文件: /etc/samba/smb.conf #配置文件 /etc/samba/lmhosts #对应NetBIOS名与主机的IP的文件,一般Samba会自 ...
- Python 用configparser读写ini文件
一.configparser 简介Python用于读写ini文件的一个官方标准库.具体详见官网链接 二.configparser 部分方法介绍 方法 描述 read(filenames) filesn ...
- OpenCV读写视频文件解析(二)
OpenCV读写视频文件解析(二) VideoCapture::set 设置视频捕获中的属性. C++:bool VideoCapture::set(int propId, double value) ...
- NSFileHandle的用法(用于读写文件)
利用NSFilehandle类提供的方法,允许更有效地使用文件. 一般而言,处理文件时都要经历以下三个步骤: 1.打开文件,并获取一个NSFileHandle对象,以便在后面的I/O操作中引用该文件 ...
- (Python基础教程之十二)Python读写CSV文件
Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...
- Linux命令(二十一) 改变文件所有权 chown 和 chgrp
目录 1.命令简介 2.常用参数介绍 3.实例 4.直达底部 命令简介 一个文件属于特定的所有者,如果更改文件的属主或属组可以使用 chown 和 chgrp 命令. chown 命令可以将文件变更为 ...
- 使用Python读写csv文件的三种方法
Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是 ...
- python读写csv文件
文章链接:https://www.cnblogs.com/cloud-ken/p/8432999.html Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗 ...
- 在.net中读写config文件的各种方法
阅读目录 开始 config文件 - 自定义配置节点 config文件 - Property config文件 - Element config文件 - CDATA config文件 - Collec ...
随机推荐
- mysql5.7 linux安装参考
安装参考: https://www.cnblogs.com/ianduin/p/7679239.html http://blog.csdn.net/wb96a1007/article/details/ ...
- windows上使用clang编译程序
环境:windows7,64位 1.下载并安装llvm,安装包里除了llvm,也有clang: http://releases.llvm.org/5.0.0/LLVM-5.0.0-win64.exe ...
- 伪类 :after 清除浮动的原理和方法
浮动元素容器的clearing问题1. 问题的由来有这样一种情形:在一个容器(container)中,有两个浮动的子元素.<div> <div style=" ...
- QML学习之浅谈Window
转载地址:http://blog.csdn.net/kanchuan1905/article/details/53762788 在Qt Quick的世界里,Window对象用于创建一个与操作系统相关 ...
- 为Android添加开机启动脚本
转:https://blog.csdn.net/u014316462/article/details/76438611 本文介绍了一种在Android 4.2.2源码中添加.修改文件或者代码,来达到使 ...
- GIT使用—补丁与钩子
一.补丁 生成补丁 [root@localhost buding]# echo B > file;git add file;git commit -m "B" [master ...
- ELK之elasticsearch5.6的安装和head插件的安装
这里选择的elasticsearch为5.6的新版本,根据官方文档有几种暗装方式: https://www.elastic.co/guide/en/elasticsearch/reference/cu ...
- 20145309java第三次实验报告
实验三 敏捷开发与XP实践 实验内容 •下载并学会使用git上传代码: •与同学结对,相互下载并更改对方代码,并上传: •实现代码的重载. 实验步骤 下载并用git上传代码: •1.下载并安装好git ...
- 单调队列:temperature
题目大意:某国进行了连续n天的温度测量,测量存在误差,测量结果是第i天温度在[l_i,r_i]范围内. 求最长的连续的一段,满足该段内可能温度不降. 第一行n下面n行,每行l_i,r_i 1<= ...
- [BZOJ1026]windy数
Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? In ...