ǰλã >> SQL >> 利用pl/sql读文??
  ϸ

利用pl/sql读文??

ȶȣ398   ʱ䣺2016-05-05 11:50:12.0
利用pl/sql读文???

     以前??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>

   

    

 

  ؽ