oracle存储过程读写文件操作_第1页
oracle存储过程读写文件操作_第2页
oracle存储过程读写文件操作_第3页
oracle存储过程读写文件操作_第4页
oracle存储过程读写文件操作_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、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'但是文件不存在,它会用

2、9;W'先创建出来,'W'有覆盖的功能; 其中的location并不能简单的指定为'D:/temp'等路径,要建立一个DIRECTORY变量并付给权限(必须以DBA身份登录): Sql代码1. Create or replace directory D_OUTPUT as 'D:/TEMP'   2. grant   read ,write  on  directory&

3、#160;D_OUTPUT  to  testdb;  3. GRANT   EXECUTE   ON  utl_file  TO  testdb;  sql view plaincopy1. create or replace directory D_OUTPUT as 'D:/TEMP'  

4、;2. grant read,write on directory D_OUTPUT to testdb;  3. GRANT EXECUTE ON utl_file TO testdb;  之后就可以用UTL_FILE包建立文件了Sql代码1. V_FILE UTL_FILE.FILE_TYPE;  2. V_FILE := UTL_FILE.FOPEN('D_OUTPUT'&#

5、160;,  'Data.txt' ,  'w' );  sql view plaincopy1. V_FILE UTL_FILE.FILE_TYPE;  2. V_FILE := UTL_FILE.FOPEN('D_OUTPUT', 'Data.txt', 'w');  就可以在数据库服务器的D:/TEMP建立Data.txt 

6、;最近用到了Oracle的包UTL_FILE,网上却没找到关于它的函数,过程使用说明,虽然都不是很难的东西,但简单列出来,也能提高些效率。FOPEN IS_OPEN GET_LINE PUT NEW_LINE PUT_LINE PUTF FFLUSH FCLOSE FCLOSE_ALL  UTL_FILE.FOPEN 用法FOPEN会打开指定文件并返回一个文件句柄用于操作文件。所有PL/SQL版本:      Ora

7、cle 8.0版及以上: FUNCTION UTL_FILE.FOPEN ( FUNCTION UTL_FILE.FOPEN (    location     IN VARCHAR2,      location     IN VARCHAR2,    filename     IN VARCHAR2,   

8、0;  filename     IN VARCHAR2,    open_mode    IN VARCHAR2)      open_mode    IN VARCHAR2, RETURN file_type;               

9、60; max_linesize IN BINARY_INTEGER)                                RETURN file_type;参数 location 文件地址 filename 文件名 openmo

10、de 打开文件的模式(参见下面说明) max_linesize文件每行最大的字符数,包括换行符。最小为1,最大为32767 3种文件打开模式:R 只读模式。一般配合UTL_FILE的GET_LINE来读文件。W 写(替换)模式。文件的所有行会被删除。PUT, PUT_LINE, NEW_LINE, PUTF和FFLUSH都可使用A 写(附加)模式。原文件的所有行会被保留。在最末尾行附加新行。PUT, PUT_LINE, NEW_LINE, PUTF和FFLUSH都可使用打开文件时注意以下几点:文件路径和文件名合起来必须表示操作系统中一个合法的文件。文件路径必须存在

11、并可访问;FOPEN并不会新建一个文件夹。如果你想打开文件进行读操作,文件必须存在;如果你想打开文件进行写操作,文件不存在时,会新建一个文件。如果你想打开文件进行附加操作,文件必须存在。A模式不同于W模式。文件不存在时,会抛出INVALID_OPERATION异常。FOPEN 会抛出以下异常UTL_FILE.INVALID_MODEUTL_FILE.INVALID_OPERATIONUTL_FILE.INVALID_PATHUTL_FILE.INVALID_MAXLINESIZEUTL_FILE.IS_OPEN 用法如果文件句柄指定的文件已打开,返回TRUE,否则FALSEFUNCT

12、ION UTL_FILE.IS_OPEN (file IN UTL_FILE.FILE_TYPE) RETURN BOOLEAN;UTL_FILE只提供一个方法去读取数据:GET_LINEUTL_FILE.GET_LINE 用法读取指定文件的一行到提供的缓存。PROCEDURE UTL_FILE.GET_LINE    (file IN UTL_FILE.FILE_TYPE,     buffer OUT VARCHAR2);file由FOPEN返回的文件句柄 buffer 读取的一行数据的存放

13、缓存buffer必须足够大。否则,会抛出VALUE_ERROR 异常。行终止符不会被传进buffer。异常NO_DATA_FOUND VALUE_ERROR UTL_FILE.INVALID_FILEHANDLEUTL_FILE.INVALID_OPERATIONUTL_FILE.READ_ERRORUTL_FILE.PUT 用法在当前行输出数据PROCEDURE UTL_FILE.PUT     (file IN UTL_FILE.FILE_TYPE,     buffer OUT

14、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来结束当前行,或者使用PUT_LINE输出带有行终止符的完整行数据。PROCEDURE UTL_FILE.NEW_L

15、INE    (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_FILEHANDLEUT

16、L_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;UTL_FILE.PUT_LINE 输出一个字符串以及一个与系统有关的行终止符PROCEDURE UT

17、L_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.W

18、RITE_ERROR例子这里利用UTL_FILE.PUT_LINE从表emp读取数据到文件:PROCEDURE emp2file IS   fileID UTL_FILE.FILE_TYPE;BEGIN   fileID := UTL_FILE.FOPEN ('/tmp', 'emp.dat', 'W');    /* Quick and dirty construction here! */   FOR emprec IN (SELECT * F

19、ROM emp)   LOOP      UTL_FILE.PUT_LINE          (TO_CHAR (emprec.empno) | ',' |          emprec.ename | ',' |        &#

20、160; .          TO_CHAR (emprec.deptno);   END LOOP;    UTL_FILE.FCLOSE (fileID);END;PUT_LINE相当于PUT后加上NEW_LINE;也相当于PUTF的格式串"%s/n"。UTL_FILE.PUTF以一个模版样式输出至多5个字符串,类似C中的printfPROCEDURE UTL_FILE.PUTF    (file I

21、N 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 DEFAULT NULL);file

22、由FOPEN返回的文件句柄format决定格式的格式串argN可选的5个参数,最多5个格式串可使用以下样式%s在格式串中可以使用最多5个%s,与后面的5个参数一一对应/n换行符。在格式串中没有个数限制%s会被后面的参数依次填充,如果没有足够的参数,%s会被忽视,不被写入文件UTL_FILE.PUTF会产生以下异常UTL_FILE.INVALID_FILEHANDLEUTL_FILE.INVALID_OPERATIONUTL_FILE.WRITE_ERRORUTL_FILE.FFLUSH确保所有数据写入文件。PROCEDURE UTL_FILE.FFLUSH (file IN UTL_FILE.FILE_TYPE);file由FOPEN返回的文件句柄操作系统可能会缓存数据来提高性能。因此可能调用put后,打开文件却看不到写入的数据。在关闭文件前要读取数据的话可以使用UTL_FILE.FFLUSH。典型的使用方法包括分析执行进度和调试纪录。UTL_FILE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论