µ±Ç°Î»Ö㺠´úÂëÃÔ >> 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>

   

    

 

  Ïà¹Ø½â¾ö·½°¸