《oracle存储过程读写文件操作Word版》由会员分享,可在线阅读,更多相关《oracle存储过程读写文件操作Word版(12页珍藏版)》请在金锄头文库上搜索。
1、传播优秀Word版文档 ,希望对您有帮助,可双击去除!racle提供的文件操作包UTL_FILE包中的UTL_FILE.FOPEN负责打开一个文件。utl_file.fopen(location in varchar2, filename in varchar2, open_mode in varchar2) return FILE_TYPE;Location 是路径参数,FILENAME 是文件名,OPEN_MODE是打开模式,R是读文本,W是写文本,A是附加文本,参数不分大小写,如果指定A但是文件不存在,它会用W先创建出来,W有覆盖的功能;其中的location并不能简单的指定为D:/te
2、mp等路径,要建立一个DIRECTORY变量并付给权限(必须以DBA身份登录):Sql代码1. Create or replacedirectoryD_OUTPUTasD:/TEMP;2. grantread,writeondirectoryD_OUTPUTtotestdb;3. GRANTEXECUTEONutl_fileTOtestdb;sqlview plaincopy1. createorreplacedirectoryD_OUTPUTasD:/TEMP;2. grantread,writeondirectoryD_OUTPUTtotestdb;3. GRANTEXECUTEONutl
3、_fileTOtestdb;之后就可以用UTL_FILE包建立文件了Sql代码1. V_FILEUTL_FILE.FILE_TYPE;2. V_FILE:=UTL_FILE.FOPEN(D_OUTPUT,Data.txt,w);sqlview plaincopy1. V_FILEUTL_FILE.FILE_TYPE;2. V_FILE:=UTL_FILE.FOPEN(D_OUTPUT,Data.txt,w);就可以在数据库服务器的D:/TEMP建立Data.txt最近用到了Oracle的包UTL_FILE,网上却没找到关于它的函数,过程使用说明,虽然都不是很难的东西,但简单列出来,也能提高些效
4、率。FOPENIS_OPENGET_LINEPUT传播优秀Word版文档 ,希望对您有帮助,可双击去除!NEW_LINEPUT_LINEPUTFFFLUSHFCLOSEFCLOSE_ALLUTL_FILE.FOPEN用法FOPEN会打开指定文件并返回一个文件句柄用于操作文件。所有PL/SQL版本:Oracle 8.0版及以上:FUNCTION UTL_FILE.FOPEN (FUNCTION UTL_FILE.FOPEN ( location IN VARCHAR2, location IN VARCHAR2, filename IN VARCHAR2, filename IN VARCHAR
5、2, open_mode IN VARCHAR2) open_mode IN VARCHAR2,RETURN file_type; max_linesize IN BINARY_INTEGER) RETURN file_type;参数location文件地址filename文件名openmode打开文件的模式(参见下面说明)max_linesize文件每行最大的字符数,包括换行符。最小为1,最大为327673种文件打开模式:R 只读模式。一般配合UTL_FILE的GET_LINE来读文件。W 写(替换)模式。文件的所有行会被删除。PUT, PUT_LINE, NEW_LINE, PUTF和FF
6、LUSH都可使用A 写(附加)模式。原文件的所有行会被保留。在最末尾行附加新行。PUT, PUT_LINE, NEW_LINE, PUTF和FFLUSH都可使用传播优秀Word版文档 ,希望对您有帮助,可双击去除!打开文件时注意以下几点:文件路径和文件名合起来必须表示操作系统中一个合法的文件。文件路径必须存在并可访问;FOPEN并不会新建一个文件夹。如果你想打开文件进行读操作,文件必须存在;如果你想打开文件进行写操作,文件不存在时,会新建一个文件。如果你想打开文件进行附加操作,文件必须存在。A模式不同于W模式。文件不存在时,会抛出INVALID_OPERATION异常。FOPEN 会抛出以下异
7、常UTL_FILE.INVALID_MODEUTL_FILE.INVALID_OPERATIONUTL_FILE.INVALID_PATHUTL_FILE.INVALID_MAXLINESIZEUTL_FILE.IS_OPEN用法如果文件句柄指定的文件已打开,返回TRUE,否则FALSEFUNCTION UTL_FILE.IS_OPEN (file IN UTL_FILE.FILE_TYPE) RETURN BOOLEAN;UTL_FILE只提供一个方法去读取数据:GET_LINEUTL_FILE.GET_LINE用法读取指定文件的一行到提供的缓存。PROCEDURE UTL_FILE.GET
8、_LINE (file IN UTL_FILE.FILE_TYPE, buffer OUT VARCHAR2);file由FOPEN返回的文件句柄buffer读取的一行数据的存放缓存buffer必须足够大。否则,会抛出VALUE_ERROR 异常。行终止符不会被传进buffer。异常NO_DATA_FOUNDVALUE_ERRORUTL_FILE.INVALID_FILEHANDLEUTL_FILE.INVALID_OPERATIONUTL_FILE.READ_ERROR传播优秀Word版文档 ,希望对您有帮助,可双击去除!UTL_FILE.PUT用法在当前行输出数据PROCEDURE UTL
9、_FILE.PUT (file IN UTL_FILE.FILE_TYPE, buffer OUT VARCHAR2);file由FOPEN返回的文件句柄buffer包含要写入文件的数据缓存;Oracle8.0.3及以上最大允许32kB,早期版本只有1023BUTL_FILE.PUT输出数据时不会附加行终止符。UTL_FILE.PUT会产生以下异常UTL_FILE.INVALID_FILEHANDLEUTL_FILE.INVALID_OPERATIONUTL_FILE.WRITE_ERRORUTL_FILE.NEW_LINE在当前位置输出新行或行终止符,必须使用NEW_LINE来结束当前行,或
10、者使用PUT_LINE输出带有行终止符的完整行数据。PROCEDURE UTL_FILE.NEW_LINE (file IN UTL_FILE.FILE_TYPE, lines IN NATURAL := 1);file由FOPEN返回的文件句柄lines要插入的行数如果不指定lines参数,NEW_LINE会使用默认值1,在当前行尾换行。如果要插入一个空白行,可以使用以下语句:UTL_FILE.NEW_LINE (my_file, 2);如果lines参数为0或负数,什么都不会写入文件。NEW_LINE会产生以下异常VALUE_ERRORUTL_FILE.INVALID_FILEHANDLE
11、UTL_FILE.INVALID_OPERATIONUTL_FILE.WRITE_ERROR例子如果要在UTL_FILE.PUT后立刻换行,可以如下例所示:PROCEDURE add_line (file_in IN UTL_FILE.FILE_TYPE, line_in IN VARCHAR2)ISBEGIN UTL_FILE.PUT (file_in, line_in); UTL_FILE.NEW_LINE (file_in);END;传播优秀Word版文档 ,希望对您有帮助,可双击去除!UTL_FILE.PUT_LINE输出一个字符串以及一个与系统有关的行终止符PROCEDURE UTL
12、_FILE.PUT_LINE (file IN UTL_FILE.FILE_TYPE, buffer IN VARCHAR2);file由FOPEN返回的文件句柄buffer包含要写入文件的数据缓存;Oracle8.0.3及以上最大允许32kB,早期版本只有1023B在调用UTL_FILE.PUT_LINE前,必须先打开文件。UTL_FILE.PUT_LINE会产生以下异常UTL_FILE.INVALID_FILEHANDLEUTL_FILE.INVALID_OPERATIONUTL_FILE.WRITE_ERROR例子这里利用UTL_FILE.PUT_LINE从表emp读取数据到文件:PRO
13、CEDURE emp2fileIS fileID UTL_FILE.FILE_TYPE;BEGIN fileID := UTL_FILE.FOPEN (/tmp, emp.dat, W); /* Quick and dirty construction here! */ FOR emprec IN (SELECT * FROM emp) LOOP UTL_FILE.PUT_LINE (TO_CHAR (emprec.empno) | , | emprec.ename | , | . TO_CHAR (emprec.deptno); END LOOP; UTL_FILE.FCLOSE (file
14、ID);END;PUT_LINE相当于PUT后加上NEW_LINE;也相当于PUTF的格式串%s/n。传播优秀Word版文档 ,希望对您有帮助,可双击去除!UTL_FILE.PUTF以一个模版样式输出至多5个字符串,类似C中的printfPROCEDURE UTL_FILE.PUTF (file IN FILE_TYPE ,format IN VARCHAR2 ,arg1 IN VARCHAR2 DEFAULT NULL ,arg2 IN VARCHAR2 DEFAULT NULL ,arg3 IN VARCHAR2 DEFAULT NULL ,arg4 IN VARCHAR2 DEFAULT NULL ,arg5 IN VARCHAR2