以前??oracle?以使用utl_file读写文件,一直没机会接触到,再看了utl_file读文件的例子后,感?和java?读文件很像,?下是??单的使用utl_file读文件的例子,大神?绕过,因为例子真的很?单,我使用的oracle版本?0.2?/span>
首先,普通用户?想使用utl_file,必须?有权限,首先使用dba登录,给用户授权,?下所示:
D:\oracle\app\oracle\product\10.2.0\server\BIN>sqlplus "connect as sysdba"SQL*Plus: Release 10.2.0.1.0 - Production on 星期?1?26 10:25:40 2014Copyright (c) 1982, 2005, Oracle. All rights reserved.输入口令:连接?Oracle Database 10g Express Edition Release 10.2.0.1.0 - ProductionSQL> grant execute on utl_file to testuser;授权成功?/pre>有了权限之后,?想?取文件,?新建???span>directory,还得?该目录有读取权限?/span>
新建?命令如下?/span>
SQL> create or replace directory ORADIR_MY_FILE as 'f:/saveFile/oracle/';?已创建??/pre>对用户授予??读写权限
SQL> grant write,read on directory ORADIR_MY_FILE to testuser;授权成功?/pre>如果限制用户?读权限可以把write去掉?/span>
能授予权限就能撤?用户权限,撤?用户权限命令如下?/span>
revoke write,read on directory ORADIR_MY_FILE from testuser;查看系统?有目录命令?下:
select * from dba_directories;如想删除?,可以这样做?/span>
SQL> drop directory ORADIR_MY_FILE;?已删除??/pre>?新建完了,权限也有了,可以试下?取文件了?/span>
---读文件测?DECLARE f_file utl_file.file_type; c_line VARCHAR2(2048);BEGIN --打开文件 f_file := utl_file.fopen('ORADIR_MY_FILE', 'testsql.sql', 'R'); IF utl_file.is_open(f_file) THEN LOOP BEGIN utl_file.get_line(f_file, c_line); EXCEPTION WHEN no_data_found THEN EXIT; END; dbms_output.put_line(c_line); END LOOP; END IF; IF utl_file.is_open(f_file) THEN utl_file.fclose(f_file); END IF;EXCEPTION WHEN OTHERS THEN IF utl_file.is_open(f_file) THEN utl_file.fclose(f_file); END IF; dbms_output.put_line('异常:' || SQLERRM);END;
utl_file.fopen('ORADIR_MY_FILE','testsql.sql','R');??数是刚才新建的目录,??数是文件名,?使用全路径??f:/saveFile/oracle/testsql.sql';文件不?定是sql文件,什么java,txt,xml都可以,??打开doc之类的文件,这样你得到的将是乱码?/span>
经我测试,文件名不能使用?,还?f:/saveFile/oracle/'?f:/saveFile/oracle/test/'?同的2?录,?f:/saveFile/oracle/'授权并不说明?f:/saveFile/oracle/test/'?也有权限,上面的结??测试的结果,如果有?,?指?,谢?
全文完??/span>