浅说两种输出Oracle字符文件的方法(3)

使用directory要解��两个层面权限,一个是操作系统层面,要让Oracle操作系统用户可以使用目录。另一个是directory对象使用权,要进行显示的授权。

SQL> grant write on directory utl_path to scott;

Grant succeeded

SQL> grant execute on utl_file to scott;

Grant succeeded

最后,可以在代码中进行调用。

SQL> set serveroutput on size 1000;

SQL> declare

2    out_file utl_file.file_type; --文件类型,也就是句柄对象

3    vc_file_name varchar2(100);

4    vc_line varchar2(100);

5    i number;

6  begin

7    vc_file_name := 'utl_file_test.txt';

9    out_file := utl_file.fopen('UTL_PATH',vc_file_name,'w'); --写方式打开文件

10 

11    if (utl_file.is_open(out_file)) then

12      for i in 1..100 loop

13          vc_line := to_char(i)||','||i||'Lines~';

14          utl_file.put_line(out_file,vc_line);

15      end loop;

16    else

17      dbms_output.put_line('Open Failure~');

18    end if;

19 

20    utl_file.fclose(out_file); --和C语言一样,需要显示进行关闭

21  end;

22  /

PL/SQL procedure successfully completed

最后,就可以在操作系统层面,找到对应文件。

[root@sicslife /]# cd /upload/

[root@sicslife upload]# ls -l

total 12

drwxr-xr-x. 7 oracle oinstall 4096 Aug 27  2013 database

drwx------. 3 oracle oinstall 4096 Aug  5 17:26 igb-5.3.2

-rw-r--r--. 1 oracle oinstall 1184 Aug  7 02:19 utl_file_test.txt

[root@sicslife upload]# cat utl_file_test.txt 

1,1Lines~

2,2Lines~

3,3Lines~

4,4Lines~

5,5Lines~

6,6Lines~

(篇幅原因,有省略…….)

[root@sicslife upload]#

Utl_file包是一种比较成熟的文件读写方案,除了实例中操作的步骤方法之外,还定义了很多有用的读写方法、异常类型,这对于我们进行完善编程是很有意义的。同时,在实际应用中,utl_file有着更多的细节因素和限制特性,本篇不予累述。

3、结论

利用数据库生成文件,是非常常见的需求。在不借助第三方工具的情况下,spool和utl_file是不错的工具选择。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/be122e29951eef3fd147fa155487fff6.html