UTL_FILE

本文介绍了如何在Oracle数据库中使用UTL_FILE包进行文件操作,包括创建表、目录对象,读写文件,以及利用UTL_FILE进行文件的复制、删除、重命名和属性查询。示例展示了如何创建存储过程进行文件操作,并强调了在Oracle9i第2版以后,可以使用目录对象来简化路径管理。
摘要由CSDN通过智能技术生成

SQL >   show   user
USER   为   "TEST "
SQL >   CREATE   TABLE   test.AAA   (
    2     T_ID   VARCHAR2   (5)   NOT   NULL,
    3     T_IMAGE   BLOB   NOT   NULL
    4     );

表已创建。
SQL >   create   or   replace   directory   images   as   'D:/WORKS/DEMO/AA/IMAGES ';

目录已创建。

SQL >   CREATE   OR   REPLACE   PROCEDURE   test.testp   (
    2     TID                       VARCHAR2,
    3     FILENAME             VARCHAR2)   AS
    4               F_LOB       BFILE;
    5               B_LOB       BLOB;
    6           BEGIN
    7                   INSERT   INTO   AAA   (T_ID,   T_IMAGE)   VALUES   (TID,     EMPTY_BLOB   ())   RETURN   T_IMAGE   INTO   B_LOB;
    8                   F_LOB:=   BFILENAME   ( 'IMAGES ',   FILENAME);
    9                   DBMS_LOB.FILEOPEN   (F_LOB,   DBMS_LOB.FILE_READONLY);
  10                   DBMS_LOB.LOADFROMFILE   (B_LOB,   F_LOB,     DBMS_LOB.GETLENGTH   (F_LOB));
  11                   DBMS_LOB.FILECLOSE   (F_LOB);
  12                   COMMIT;
  13           END;
  14     /

过程已创建。

SQL >
SQL >   execute   testp( 'F1001 ', 'AALOGO.GIF ');

PL/SQL   过程已成功完成。 

 

http://www.oracle.com/technology/sample_code/tech/pl_sql/htdocs/x/Utl_File/start.htm

  • UTL_FILE.FREMOVE 删除文件。
  • UTL_FILE.FRENAME 重命名文件,事实上,还可以移动文件。
  • UTL_FILE.FCOPY 将一个文件的全部或部分复制到另一个文件中。
  • UTL_FILE.FGETATTR获取文件的长度之类的属性。

在Oracle9i第2版之前,当调用FOPEN打开文件(用于读或写)时,UTL_FILE要求必须明确指出文件的位置。这不是最优的实施,因为它意味着开发人员必须在应用程序中的多个地方对那些位置进行硬编码(hard-code)。如果目录改变了,就必须进行很多麻烦的整理工作。

你现在可以在Oracle9i第2版中为目录的文件系统位置指定一个Oracle目录对象的名字。这种技巧"隐藏"了实际的操作系统位置。如果那个位置需要改变,只需要更新目录对象的定义,所有对FOPEN,FREMOVE,FRENAME和FCOPY的调用都不会受到影响。

为了创建一个目录对象,需要具备CREATE ANY DIRECTORY权限,然后就可以像下面的例子那样定义一个新的目录对象:

 

CREATE OR REPLACE DIRECTORY DEVELOPMENT_
   DIR as '/dev/source';
CREATE OR REPLACE DIRECTORY TEST_DIR 
   as '/test/source';

 

你应当知道当你创建目录对象时,Oracle数据库并不会验证你所指定的位置。另一点需要留意的是当你在一个调用(如调用UTL_FILE.FOPEN)中指定目录对象的名字时,它被看作一个区分大小写的字符串。换而言之,如果你不是用大写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值