PL/SQL 3.3以上的版本中,UTL_FILE包答应用户通过PL/SQL读写操作系统文件
2012-12-10 17:47
615 查看
PL/SQL 3.3以上的版本中,UTL_FILE包答应用户通过PL/SQL读写操作系统文件。如下:
declare
file_handle UTL_FILE.FILE_TYPE;
begin
file_handle := UTL_FILE.FOPEN('TMP', '文件名', 'w',[1-32767]);
--四个参数:目录,文件名,打开方式,最大行数(默认为2000)
UTL_FILE.PUTF(file_handle, '写入的信息\n');
UTL_FILE.FCLOSE(file_handle);
exception
WHEN utl_file.invalid_path THEN
raise_application_error(-20000, 'ERROR: Invalid path for file or path not in INIT.ORA.');
end;
--PutF()过程用来以指定格式把文本写入一个文件
--Put_Line()过程把一个指定的字符串写入文件并在文件中开始新的一行
9i中函数说明:
UTL_FILE.FOPEN (
location IN VARCHAR2,
filename IN VARCHAR2,
open_mode IN VARCHAR2,
max_linesize IN BINARY_INTEGER)
RETURN file_type;
Parameters Description
location (IN) The Directory location of the source file, a DIRECTORY_NAME from the ALL_DIRECTORIES view (case sensitive)
filename File name, including extension (file type), without directory path. In Unix,the filename cannot end with /.
一个使用文件的测试
1、用sys用户登录到数据库(ora9i):conn sys/orcl@eai01 as sysdba
2、在sqlplus中运行create or replace directory TMP as 'd:\testtmp';
在sqlplus中运行grant read on directory TMP to public
3、在scott用户下建立存储过程如:pReadFileTest
CREATE OR REPLACE PROCEDURE pReadFileTest
(FPATH IN STRING,FNAME IN STRING,MAX_NUM IN NUMBER)
IS
FILE_HANDLE UTL_FILE.FILE_TYPE;
TEXT_BUFFER STRING(1000);
LINE_NUM NUMBER;
BEGIN
DBMS_OUTPUT.PUT_LINE('INPUT PATH='FPATH);
DBMS_OUTPUT.PUT_LINE('INPUT FILENAME='FNAME);
LINE_NUM :=0;
BEGIN
FILE_HANDLE := UTL_FILE.FOPEN(FPATH,FNAME,'R',MAX_NUM);
LOOP
LINE_NUM:= LINE_NUM + 1;
UTL_FILE.GET_LINE(FILE_HANDLE,TEXT_BUFFER);
DBMS_OUTPUT.PUT_LINE('LINE'LINE_NUM' : 'TEXT_BUFFER);
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN;
WHEN UTL_FILE.INVALID_PATH THEN
DBMS_OUTPUT.PUT_LINE('INVALID PATH');
WHEN UTL_FILE.INVALID_MODE THEN
DBMS_OUTPUT.PUT_LINE('INVALID MODE');
WHEN UTL_FILE.INVALID_FILEHANDLE THEN
DBMS_OUTPUT.PUT_LINE('INVALID FILEHANDLE');
WHEN UTL_FILE.INVALID_OPERATION THEN
DBMS_OUTPUT.PUT_LINE('INVALID OPERATION');
WHEN UTL_FILE.READ_ERROR THEN
DBMS_OUTPUT.PUT_LINE('READ ERROR');
WHEN UTL_FILE.WRITE_ERROR THEN
DBMS_OUTPUT.PUT_LINE('WRITE ERROR');
WHEN UTL_FILE.INTERNAL_ERROR THEN
DBMS_OUTPUT.PUT_LINE('INTERNAL ERROR');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('OTHER ERROR='SQLERRM);
END pReadFileTest;
4、在sqlplus中运行set serveroutput on
5、exec pReadFileTest('TMP','A.TXT','R',30000)
6、正常输出
小结:
在9i中可以不在init.ora中增加utl_file_dir目录,而是在sys用户下创建一个directory目录(实际上是在sys用户下的dir$表中增加一个对应的OS_PATH),然后将对该directory对象的读/写操作的权限grant给public。
相关文章推荐
- pl/sql读写文件 spool和UTL_FILE package
- 使用PL/SQL的UTL_FILE写xls和csv格式文件(转)
- 使用PL/SQL的UTL_FILE写xls和csv格式文件
- oracle读写文件--利用utl_file包对磁盘文件的读写操作
- 通过Dockerfile 文件为linux images 添加新用户
- Oracle常用命令_查看用户_新建user_连接user_授权user_版本_表空间查看_控制文件_日志_sql语句
- 后台使用Spring MVC 4.15 版本 通过 ajaxFileUpload plugin插件上传文件相应时引起的一个小问题,Chrome、Firefox中出现SyntaxError:unexpected token <
- oracle存储过程大数据量导出CSV文件(utl-file读写文件包)
- PL/SQL Developer在64位操作系统上通过instantclient连接到oracle数据库
- Database PL/SQL Packages and Types Reference 168 UTL_FILE
- oracle ORA-01017 用户无法通过PL-SQL登录,Toad可以登录
- 如何通过pl/sql将excel文件数据导入到oracle
- 各种浏览器下用JS获取文件域的文件路径的方法/PHP获取用户浏览器和操作系统版本名称
- 利用PL/SQL读写文件
- Cocos2d-x 3.3版本以上无法打开包含文件extensions/ExtensionExport.h
- 不通过form改用户的密码,直接在PL/SQL中重置用户密码
- 在Windows操作系统下通过PL/SQL连接到VM中Linux安装的Oracle
- oracle读写文件--利用utl_file包对磁盘文件的读写操作
- 通过Dockerfile 文件为linux images 添加新用户
- 在局域网内C/S版本应用很好,外地用户想通过拨号的方式来应用,客户机总是连不上SQL服务器,提示“无法建立连接”。