Database PL/SQL Packages and Types Reference 168 UTL_FILE

使用UTL_FILE包,PL/SQL程序可以读写操作系统文本文件。UTL_FILE提供一个操作系统I/O文件流的受限版本。

这个章节包括以下主题:
一.使用UTL_FILE
1.安全模型
2.类型
3.规则和限制
4.异常
5.示例
二.UTL_FILE子程序语法

一.使用UTL_FILE

1.安全模型


UTL_FILE是客户端和服务端都可以使用的PL/SQL。客户端(文本输入输出)和服务端接口都是受到服务器端文件系统权限检查的影响。
在过去,UTL_FILE功能的可用目录是指定使用UTL_FILE_DIR参数来初始化的文件。但是,UTL_FILE_DIR路径是不建议使用的。你使用创建目录(CREATE DIRECTORY)特性来代替UTL__FILE_DIR是提倡的。目录对象对于UTL_FILE应用程序管理者提供了更多灵活性和细粒控制,可以维持动态引用(这就说明,不用切断数据库连接)并且兼容其他Oracle工具。CREATE DIRECTORY权限只能默认由SYS和SYSTEM赋予。
在UNIX系统中,一个由FOPEN函数创建的文件的拥有者是正在运行实例的影子进程的拥有者。通常这个拥有者是ORACLE。使用FOPEN创建的文件总是对于使用UTL_FILE子程序是可读写的,但是没有权限而需要读取PL/SQL外部文件的用户可能需要从系统管理员得到权限。

2.类型

TYPE file_type IS RECORD (
   id       BINARY_INTEGER, 
   datatype BINARY_INTEGER);
文件位置和文件名参数作为分开的字符串是支持FOPEN函数的,所以文件路径可以由存在的目录的列表检查,具体是由ALL_DIRECTORIES存在目录对象的视图来检查。而且,文件路径和文件名必须表示为一个在系统上合法的文件名,并且目录必须存在。存在目录的子目录不是必要的但也是可以存在的;具体使用一个完整的路径名匹配一个ALL_DIRECTORY对象是很必要的。

UTL_FILE在读取时会隐式转换行结束符,因此在一个GET_LINE命令会影响字节返回数目。例如,UTL_FILE.GET_LINE的len参数明确数据需要的字节数,实际上返回给用户的字节数要比以下参数字符数小:
GET_LINE len参数,或者直到下一行结束符的字节数,或者由UTL_FILE.OPEN确定的max_linesize参数。

FOPEN的max_linesize参数必须是1到32767范围内的数字。如果没有显式给出,Oracle提供的默认值是1024。GET_LINE的len参数必须是1到32767范围内的数字。如果没有显式给出,Oracle提供的默认值是max_linesize的值。如果max_linesize和len被定义成不同的值,更小的值将被优先使用。

UTL_FILE.GET_RAW忽略行结束符并且返回实际被GET_RAW的len参数需要的字节数。

当数据编码到字符集里读并且全球化支持通知(例如以NLS_LANG)它被编码到另一个字符集,结果是不确定的。如果NLS_LANG已经设置,应该和数据库字符集设置保持一致。

3.规则和限制


操纵系统指定的参数,例如在UNIX中的C-shell环境变量,不能在文件位置和文件名参数中被使用。

UTL_FILE I/O的性能和标准操作系统流文件I/O(OPEN,GET,PUT,CLOSE)的性能相似,但是有一些限制。例如,你使用FOPEN函数来返回一个文件句柄,这个句柄是你使用调用来GET_LINE或者PUT来执行流I/O指向一个文件的。当文件I/O完成,你调用FCLOSE来完成任何输出和文件关联的自由资源。

4.异常


异常列表1
异常列表2


5.示例
略。


第二部分 UTL_FILE子程序语法
 待续
原文连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值