Chinaunix首页 | 论坛 | 博客
  • 博客访问: 72297
  • 博文数量: 25
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 215
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-08 09:35
文章分类

全部博文(25)

文章存档

2011年(1)

2009年(18)

2008年(6)

我的朋友

分类: Oracle

2009-02-18 10:58:27

其实,在Oracle中我们也可以实现对文件系统的读写,提高了系统的可用性和扩展性。

首先要创建一个Directory:

     Create or Replace Directory ORA_DIRECTORY as 'D:\ora_directory';

注意,这个目录应该要确实存在,否则你在引用ORA_DIRECTORY前要手动创建它。

你还可以将访问权限授予其他用户:
   
     Grant READ,WRITE on Directory ORA_DIRECTORY to user_name;

现在让我们来访问这个目录:

     Create or replace Procedure proc_Directory(pString varchar2) as

         f_handle utl_file.file_type;

     begin
         --打开指定目录中的文件,如果该文件不存在,将新建一个同名文件,
         --w/r表示读或写打开,
         --第一个参数就是先前创建的Directory,名字用大写,并且用单引号括起来,
         --第二个参数表示要打开的文件名字。
         f_handle := utl_file.fopen('ORA_DIRECTORY','file_name.txt','W');
         
         --写入pString存储的串值
         utl_file.put_line(f_handle,pString);
         
         --养成关闭资源的好习惯
         utl_file.fclose(f_handle);

     end proc_Directory;

同样的也可以进行读取访问:

     Create or replace Procedure proc_Read_Directory(pString out varchar2) as

         f_handle utl_file.file_type;
         f_buffer varchar2(4000);
     begin
         --打开指定目录中的文件,如果该文件不存在,将新建一个同名文件,
         --w/r表示读或写打开,
         --第一个参数就是先前创建的Directory,名字用大写,并且用单引号括起来,
         --第二个参数表示要打开的文件名字。
         f_handle := utl_file.fopen('ORA_DIRECTORY','file_name.txt','R');
         
         --读取一行,如果再次执行utl_file.get_line(),那么会自动读取下一行。
         utl_file.get_line(f_handle,f_buffer);
         pString := f_buffer;
         --养成关闭资源的好习惯
         utl_file.fclose(f_handle);

     end proc_Directory;

查看系统中所有的Directory:
    
     select * from dba_directories;

删除无用的Directory:
     
     Drop Directory ORA_DIRECTORY;

有任何错误和遗漏,请大家不吝赐教。


阅读(1485) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~