UTL_FILE

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

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

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

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

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

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

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

如何利用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‘);

五、查看结果

[[email protected] ~]$ 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

时间: 2024-10-08 18:41:45

UTL_FILE的相关文章

oracle 使用 UTL_FILE 导出表数据到txt文件

环境: Red Hat Enterprise Linux Server release 6.6 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production --创建目录 create or replace directory TXT_DIR as '/opt/oracle/database/exptxt'; grant read,write on directory TXT_DIR to manager

oracle读写文件--利用utl_file包对磁盘文件的读写操作

摘要: 用户提出一个需求,即ORACLE中的一个表存储了照片信息,字段类型为BLOB,要求能导出成文件形式. 本想写个C#程序来做,后来想起ORACLE有很多包,功能很好很强大,于是网上参考了些文章完成了. 主要是用了ORACLE的两个包:UTL_FILE和DBMS_LOB. 实现过程: 第一步:以管理员用户登陆设置可操作目录 --CREATE DIRECTORY privilege is granted only to SYS and SYSTEM by default. create or

Oracle之UTL_FILE 包用法详解

UTL_FILE包可以用来读写操作系统上的文本文件,UTL_FILE提供了在客户端(FORM等等)和服务器端的文件访问功能. 创建测试目录: 新建一个command window: 创建目录:(以system用户登录数据库) Sql代码 收藏代码 SQL> create or replace directory cux_log_dir as '/home/appltest/debug'; Directory created 赋权限. Sql代码 收藏代码 SQL> grant read, wr

Oracle的UTL_FILE.FOPEN学习笔记

Oracle提供的文件操作包UTL_FILE包中的UTL_FILE.FOPEN负责打开一个文件. UTL_FILE.FOPEN(location in varchar2, filename in varchar2, open_mode in varchar2) return FILE_TYPE; Location 是路径参数, FILENAME 是文件名, OPEN_MODE是打开模式,'R'是读文本,'W'是写文本,'A'是附加文本,参数不分大小写,如果指定'A'但是文件不存在,它会用'W'先

oracle中utl_file包读写文件操作实例学习

在oracle中utl_file包提供了一些操作文本文件的函数和过程,学习了一下他的基本操作 1.创建directory,并给用户授权 复制代码 代码如下: --创建directory create or replace directory TESTFILE as '/home/oracle/zxx/test'; --给用户授权 grant read, write on directory TESTFILE to zxx; 详细介绍 http://download.oracle.com/docs

ORACLE之UTL_FILE包详解

1 Utl_File包简介Oracle的UTL_FILE包用来实现对磁盘文件的I/O操作.(1)Oracle10g之前的版本需要指定utl_file包可以操作的目录.      方法:        1.alter system set utl_file_dir='e:/utl' scope=spfile;        2.在init.ora文件中,配置如下:UTL_FILE=E:/utl或者UTL_FILE_DIR=E:/utl;(2)Oracle10g之后的版本,只需要先创建一个路径即可.

utl_file包的使用

首先看一下oracle 脚本 /* # $Header: HTMomse12.sql 12.0.4 20121015 Support $ #+======================================================================================+ #| Copyright (c) 2002 Oracle Corporation Redwood Shores, California, USA | #| Oracle Suppor

UTL_FILE 的用法

UTL_FILE 的用法 UTL_FILE 是用来进行文件IO处理的专用包,使用这外包的注意事项如下: 1. 生成的文件好象只能放置在DATABASE所在的服务器路径中. 2. 生成的文件如何DOWNLOAD到本地来,还有待研究. Coding步骤: 1. 注册文件输出路径 Create directory path[例如: C:\AA] as 'pathname'; 此命令应由数据库管理员建立,目录需要赋予相应的读写权限. 2. 定义文件变量 v_filename    utl_file.fi

oracle plsql utl_file

set SERVEROUT onDECLAREtab_sql varchar2(4000);tab_lob clob;TYPE ddl_type IS REF CURSOR;ddl_cur ddl_type;type tab_ddl_type is record(ddl_con clob);tab_ddl tab_ddl_type;cursor tab_cur is select DISTINCT object_type,object_name,OWNER from dba_procedures