首页 > 其他 > 详细

UTL_FILE

时间:2014-08-15 12:10:48      阅读:584      评论:0      收藏:0      [点我收藏+]

在PL/SQL中,UTL_FILE包提供文本文件输入和输出功能。

可以访问的目录通过初始化参数UTL_FILE_DIR设置。

注意:UTL_FILE只能读取服务器端文本文件,不能读取二进制文件。这时候,应该使用DBMS_LOB包。

使用UTL_FILE包的方法是打开文件文件,执行文件内容写入和读取等操作,然后关闭这个文件。如果不关闭这个文件,操作系统会认为这个文件当前正在使用中,不允许在关闭之前再次写入这个文件。

下表列出了UTL_FILE包的主要函数、过程及描述。

bubuko.com,布布扣

下表列出了该报的异常情况及描述。

bubuko.com,布布扣

下面的范例会演示将日期、时间和当前所登陆用户数写入日志文件。

如何利用UTL_FILE来写文件

一、 设置UTL_FILE_DIR初始化参数

      SQL> alter system set utl_file_dir=‘/home/oracle‘ scope=spfile;

      重启数据库

二、赋予test用户访问v$session表的权限

      SQL> grant select on v_$session to test;

三、脚本如下

CREATE OR REPLACE PROCEDURE LOG_USER_COUNT
  (PI_DIRECTORY IN VARCHAR2,
   PI_FILE_NAME IN VARCHAR2)
AS
   v_file_handle UTL_FILE.FILE_TYPE;
   v_user_count number;
BEGIN
   SELECT count(*)
   INTO  v_user_count
   FROM  v$session
   WHERE username is not null;
   v_file_handle := UTL_FILE.FOPEN(PI_DIRECTORY,PI_FILE_NAME,W);
   UTL_FILE.PUT_LINE(v_file_handle,--- User log ---);
   UTL_FILE.NEW_LINE(v_file_handle);   
UTL_FILE.PUT_LINE(v_file_handle,
ON ||TO_CHAR(SYSDATE,MM/DD/YY HH24:MI));
UTL_FILE.PUT_LINE(v_file_handle,Numbers of users logged on: ||v_user_count); UTL_FILE.NEW_LINE(v_file_handle); UTL_FILE.PUT_LINE(v_file_handle,--- End log ---); UTL_FILE.NEW_LINE(v_file_handle); UTL_FILE.FCLOSE(v_file_handle); EXCEPTION WHEN UTL_FILE.INVALID_FILENAME THEN DBMS_OUTPUT.PUT_LINE(File is invalid); WHEN UTL_FILE.WRITE_ERROR THEN DBMS_OUTPUT.PUT_LINE(Oracle is not able to write to file); END;

四、 执行log_user_count过程

       SQL> exec log_user_count(‘/home/oracle‘,‘user.log‘);

五、查看结果

      [oracle@node2 ~]$ cat user.log
       --- User log ---

       ON 06/25/14 03:02
       Numbers of users logged on: 1

       --- End log ---

上述范例演示的是如何利用UTL_FILE来写文件,下面我们来看看如何利用UTL_FILE来访问文件,结果基于上例

如何利用UTL_FILE来访问文件

一、 脚本如下

CREATE OR REPLACE PROCEDURE READ_FILE
   (PI_DIRECTORY IN VARCHAR2,
    PI_FILE_NAME IN VARCHAR2)
AS
   v_file_handle UTL_FILE.FILE_TYPE;
   v_file_line varchar2(1024);
BEGIN
   v_file_handle := UTL_FILE.FOPEN(PI_DIRECTORY,PI_FILE_NAME,R);
   LOOP
      UTL_FILE.GET_LINE(v_file_handle,v_file_line);
      DBMS_OUTPUT.PUT_LINE(v_file_line);
   END LOOP;
EXCEPTION
   WHEN NO_DATA_FOUND THEN
      UTL_FILE.FCLOSE(v_file_handle);
END;

二、 执行read_file过程

      SQL> exec read_file(‘/home/oracle‘,‘user.log‘);

      --- User log ---
      ON 06/25/14 03:02
      Numbers of users logged on: 1
      --- End log ---

      PL/SQL procedure successfully completed.

 

   

 

       

 

UTL_FILE,布布扣,bubuko.com

UTL_FILE

原文:http://www.cnblogs.com/ivictor/p/3913020.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!