Utl_File
Oracle9i Database 9.2.0 版中引入的增强功能概述
在 9.2.0 版之前,通过 UTL_FILE_DIR 初始化参数来指示文件目录。这种方法的缺点是,要弹出实例来改变目录列表,这样就不存在安全的模式(所有用户都可以存取任意目录上的文件)。9.2.0 版允许对 Utl_File 使用与对 BFILE 相同的机制(目录模式对象)。您应当认为 UTL_FILE_DIR 初始化参数是不鼓励使用的。
Utl_File.Get_Line 和 Utl_File.Put_Line 的行长界限已经从 1K 增加到了 32K。
已经引入了以下新的 API 基元……
用于操作系统文件管理
- procedure Fgetattr
- procedure Fcopy
- procedure Fremove
- procedure Frename
用于处理RAW数据
- procedure Fseek
- function Fgetpos
- procedure Get_Raw
- procedure Put_Raw
此外,Get_Line 和 Get_Line_Nchar 有了一个新的缺省二进制整数参数 len。而 Put_Line 有了一个新的缺省布尔参数 autoflush。
通过透明的内在再实现,Utl_File 的性能得到了改善。
为了在以下测试中发现一些可能的异常,您需要作为 Oracle 用户登陆存放数据库的计算机,然后创建和删除文件。
创建 UTL_FILE_TEST 目录
和 PROGRAMMER 测试用户
通过提供一个
目录名作为实参,这些示一律使用 9.2.0 版中新增的方法来提供
位置形参。我们使用同样的指定用于用户卸载文件的文件系统目录。为方便起见,我们让测试用户查询
v$parameter 视图和执行
Dbms_Pipe。
创建用户。
API
此包展示了以下过程和函数。它们都没有过载。
打开,进行写操作然后关闭
- function Fopen
- function Is_Open
- procedure Put_Line
- procedure Fclose
- procedure Fclose_All
此示例示范了以上所有的 API。这示范了 9.2.0 版中使用
目录模式对象进行打开操作的新功能。
摹拟 Unix ls, cp, mv, rm
- procedure Fgetattr
- procedure Fcopy
- procedure Frename
- procedure Fremove
此示例示范了以上所有的 API,这些都是 9.2.0 版中新增的内容。
处理面向行的字符数据
此示例演示了 autoflush,方法是将一个行写至文件然后等待通过
Dbms_Pipe 从另一个会话发来的消息,使您有时间用
tail -f (Unix 上,或其他操作系统上的等价命令)来进行观察。
创建 Wait 包。否则,此示例仅演示 9.2.0 版之前的功能。
- procedure Get_Line
- procedure Put
- procedure Putf
- procedure Put_Line
- procedure New_Line
- procedure Fflush
此示例示范了以上所有的 API,并范了新的
Get_Line 的
len 参数和
Put_Line 的
autoflush参数。
处理面向行的 NCHAR 数据
除
Put_Line_Nchar 没有
autoflush 参数之外,使用
NCHAR 的每个过程(或函数)在形式和内容上都与其对应的
VARCHAR2 相同。因而不提供代码示例。
- function Fopen_Nchar
- procedure Get_Line_Nchar
- procedure Put_Nchar
- procedure Putf_Nchar
- procedure Put_Line_Nchar
处理RAW数据
- procedure Put_Raw
- procedure Get_Raw
- function Fgetpos
- procedure Fseek
此示例示范 Get_Raw。此示例示范 Put_Raw。此示例示范 Fseek。
注意:在 Windows 2000 平台上的 9.2.0 版中出现的特定端口 Bug #2546782 报告了来自 Utl_File.Put_Raw 的错误输出。
异常
- file_open
- charsetmismatch
- invalid_path
- invalid_mode
- invalid_filehandle
- invalid_operation
- read_error
- write_error
- internal_error
- invalid_maxlinesize
- invalid_filename
- access_denied
- invalid_offset
- delete_failed
- rename_failed
Bryn Llewellyn,PL/SQL 产品经理,Oracle Corp
最新更新时间为 2002 年 6 月 10 日