没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
utl_file 包的应用是非常广泛的,而且也很实用,应为 Oracle 虽然有 SQL*Loader 可
以将文本的内容读到数据库里,但是不能将数据库内容输出到文本。所以基本上是要用到
utl_file 包来操作。今天又要用的时候搜了一下以前的博客,发现都没有涉及到这个,所以
今天特别来仔细得了解一下这个包的用法。
先看了一下 Oracle 官方文档中的介绍,utl_file 推荐直接使用自己创建的
DIRECTORY 来操作文件,而不要继续使用 UTL_FILE_DIR 包来指定。
utl_file 包的工作机制是这样的:首先要使用 FOPEN 函数,将文件的路径、文件名、
以及打开模式的参数传入,然后 Oracle 会到 ALL_DIRECTORIES 视图中查看路径是否已经创
建。如果路径和文件名均合法,则该文件被打开到一个 file_type 中,然后可以进行各种操
作,最后使用 FCLOSE 函数将其关闭。
OK 基本上就是这样子了,接下来看一下这个包的内容(取自 10gR2),加点颜色标注一
下,中文的注释都是我加的:
---------------------------------------------------------------------
---------------
CREATE OR REPLACE PACKAGE SYS.utl_file AUTHID CURRENT_USER AS
/* FILE_TYPE - File handle */
--utl_file
包的操作都需要指定一个
file_type
型的对象
(
用
FOPEN
来装入
)
TYPE file_type IS RECORD (id BINARY_INTEGER ,
datatype BINARY_INTEGER ,
byte_mode BOOLEAN );
/* Exceptions */
file_open EXCEPTION ;--
打开请求失败
,
文件已经被打开
charsetmismatch EXCEPTION ;--
文件使用
FOPEN_NCHAR
打开
,
但是进行了
nonchar
操作
(
如
PUTF/GET_LINE)
invalid_path EXCEPTION ;--
错误的路径
invalid_mode EXCEPTION ;--
提供了
FOPEN
不支持的打开模式
invalid_filehandle EXCEPTION ;--
文件处理错误
invalid_operation EXCEPTION ;--
文件无法打开
read_error EXCEPTION ;--
在
read
时发生操作系统错误
write_error EXCEPTION ;--
在
write
时发生操作系统错误
internal_error EXCEPTION ;--
未指定的
PLSQL
错误
invalid_maxlinesize EXCEPTION ;--FOPEN
的最大行定义错误
(
必须在
1
到
32767
之间
)
invalid_filename EXCEPTION ;--
文件名错误
,
或无法找到
access_denied EXCEPTION ;--
无法进入指定路径
invalid_offset EXCEPTION ;--
比较复杂
,
不管了
delete_failed EXCEPTION ;--
删除操作发生错误
rename_failed EXCEPTION ;--
重命名操作发生错误
--
以下都是自己定义的
Exception Errcode.
charsetmismatch_errcode CONSTANT PLS_INTEGER := - 29298 ;
invalid_path_errcode CONSTANT PLS_INTEGER := - 29280 ;
invalid_mode_errcode CONSTANT PLS_INTEGER := - 29281 ;
invalid_filehandle_errcode CONSTANT PLS_INTEGER := - 29282 ;
invalid_operation_errcode CONSTANT PLS_INTEGER := - 29283 ;
read_error_errcode CONSTANT PLS_INTEGER := - 29284 ;
write_error_errcode CONSTANT PLS_INTEGER := - 29285 ;
internal_error_errcode CONSTANT PLS_INTEGER := - 29286 ;
invalid_maxlinesize_errcode CONSTANT PLS_INTEGER := - 29287 ;
invalid_filename_errcode CONSTANT PLS_INTEGER := - 29288 ;
access_denied_errcode CONSTANT PLS_INTEGER := - 29289 ;
invalid_offset_errcode CONSTANT PLS_INTEGER := - 29290 ;
delete_failed_errcode CONSTANT PLS_INTEGER := - 29291 ;
rename_failed_errcode CONSTANT PLS_INTEGER := - 29292 ;
--
自定义的错误
PRAGMA EXCEPTION_INIT (charsetmismatch, - 29298 );
PRAGMA EXCEPTION_INIT (invalid_path, - 29280 );
PRAGMA EXCEPTION_INIT (invalid_mode, - 29281 );
PRAGMA EXCEPTION_INIT (invalid_filehandle, - 29282 );
PRAGMA EXCEPTION_INIT (invalid_operation, - 29283 );
PRAGMA EXCEPTION_INIT (read_error, - 29284 );
PRAGMA EXCEPTION_INIT (write_error, - 29285 );
PRAGMA EXCEPTION_INIT (internal_error, - 29286 );
PRAGMA EXCEPTION_INIT (invalid_maxlinesize, - 29287 );
PRAGMA EXCEPTION_INIT (invalid_filename, - 29288 );
PRAGMA EXCEPTION_INIT (access_denied, - 29289 );
PRAGMA EXCEPTION_INIT (invalid_offset, - 29290 );
PRAGMA EXCEPTION_INIT (delete_failed, - 29291 );
PRAGMA EXCEPTION_INIT (rename_failed, - 29292 );
/*
** FOPEN - open file
**
** As of 8.0.6, you can have a maximum of 50 files open
simultaneously.
**
** As of 9.0.2, UTL_FILE allows file system access for directories
** created as database objects. See the CREATE DIRECTORY command.
** Directory object names are case sensitive and must match exactly
** the NAME string in ALL_DIRECTORIES. The LOCATION parameter may
be
** either a directory string from the UTL_FILE_DIR init.ora
parameter
** or a directory object name.
**
** IN
** location - directory location of file
** filename - file name (including extention)
** open_mode - open mode ('r', 'w', 'a' 'rb', 'wb', 'ab')
>>>>>>> --'r'
:读文件
(
清空后再写入
)
>>>>>>> --'w'
:写文件
>>>>>>> --'a'
:追加文件
(
即不删除之前内容
)
>>>>>>> --'rb'
:
byte mode
读文件
(
清空后再写入
)
>>>>>>> --'wb'
:
byte mode
写文件
>>>>>>> --'ab'
:
byte mode
追加文件
(
即不删除之前内容
)
** max_linesize - maximum number of characters per line,
including the
** newline character, for this file.
** Valid values are 1 through 32767 and NULL. A
NULL
** value for max_linesize indicates that UTL_FILE
should
** calculate an operating system specific value at
runtime.
** RETURN
** file_type handle to open file
** EXCEPTIONS
** invalid_path - file location or name was invalid
** invalid_mode - the open_mode string was invalid
** invalid_operation - file could not be opened as requested
** invalid_maxlinesize - specified max_linesize is too large or
too small
** access_denied - access to the directory object is denied
*/
FUNCTION fopen(location IN VARCHAR2 ,
filename IN VARCHAR2 ,
open_mode IN VARCHAR2 ,
max_linesize IN BINARY_INTEGER DEFAULT NULL )
RETURN file_type;
PRAGMA RESTRICT_REFERENCES (fopen, WNDS , RNDS , TRUST );
/*
** FOPEN_NCHAR - open file
**
** Note: since NCHAR contains mutibyte character, it is highly
recommended
** that the max_linesize is less than 6400.
*/
剩余17页未读,继续阅读
资源评论
lanweihua
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功