您的位置:首页 > Web前端

Database PL/SQL Packages and Types Reference 168 UTL_FILE

2016-12-06 20:51 603 查看
使用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.异常





5.示例

略。

第二部分 UTL_FILE子程序语法

待续

原文连接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 plsql