UTL_FILE 学习

 /* UTL_FILE 学习
   UTL_FILE包 允许用户通过PL/SQL读写操作系统文件
*/

 

/*
  1、创建目录:
*/
create or replace directory MY_DIR as 'E:\javaWP\Ttt';
create or replace directory TO_DIR as 'E:\javaWP\Ott';

查看目录

 select * from dba_directories;

--给普通用户testdb 赋予相应权限
grant read,write on directory MY_DIR to testdb;  
GRANT EXECUTE ON utl_file TO testdb;

/*
  2、文件复制
  FCOPY :Copies a contiguous portion of a file to a newly created file
  use:
    utl_file.fcopy (
      location   IN VARCHAR2,  --需要文件目录
      filename   IN VARCHAR2,  --需要复制的文件名
      dest_dir   IN VARCHAR2,  --目的地目录
      dest_file  IN VARCHAR2,  --复制后的新文件名
      start_line IN PLS_INTEGER DEFAULT 1,        --复制原文件内容的起始行
      end_line   IN PLS_INTEGER DEFAULT NULL);    --复制原文件内容的末行
*/
--demo
BEGIN
utl_file.fcopy('MY_DIR', 'test1.txt', 'MY_DIR', 'cp_test1.txt',3,6);
END;


/*
  3、关闭UTL_FILE 打开的所有文件
  FCLOSE_ALL:Close All Files Opened By UTL_FILE
*/
--demo
set serveroutput on size(200);

DECLARE
  vInHandle  utl_file.file_type;
  vOutHandle utl_file.file_type;
BEGIN
  vInHandle  := utl_file.fopen('MY_DIR', 'test1.txt', 'R');
  vOutHandle := utl_file.fopen('MY_DIR', 'test2.txt', 'W');
  IF utl_file.is_open(vInHandle) THEN
    utl_file.fclose_all;
    dbms_output.put_line('Closed All');
  END IF;
END fopen;
/


/*
 4、查看文件的属性
    FGETATTR:Reads and returns the attributes of a disk file
    use:
     utl_file.fgetattr(
        location    IN VARCHAR2,  --文件所在目录
        filename    IN VARCHAR2,  --文件的名称
        exists      OUT BOOLEAN,  --文件是否存在
        file_length OUT NUMBER,   --文件的长度(大小)
        blocksize   OUT NUMBER);  --程序块尺寸
*/
--demo
set serveroutput on;

DECLARE
  ex    BOOLEAN;
  flen  NUMBER;
  bsize NUMBER;
BEGIN
  utl_file.fgetattr('MY_DIR', 'test1.txt', ex, flen, bsize);

  IF ex THEN
    dbms_output.put_line('File Exists');
  ELSE
    dbms_output.put_line('File Does Not Exist');
  END IF;
  dbms_output.put_line('File Length: ' || TO_CHAR(flen));
  dbms_output.put_line('Block Size: ' || TO_CHAR(bsize));
END fgetattr;
/


--demo 2
DECLARE
  ex    BOOLEAN;
  flen  NUMBER;
  bsize NUMBER;
BEGIN
  utl_file.fgetattr('MY_DIR', 'test3.txt', ex, flen, bsize);

  IF flen > 0 THEN
    dbms_output.put_line('File Length is ' || flen ||' kb ');   
  ELSE
    dbms_output.put_line('0 File Length is ' || flen ||' kb ');   
  END IF;
  dbms_output.put_line('File Length: ' || TO_CHAR(flen));
  dbms_output.put_line('Block Size: ' || TO_CHAR(bsize));
END fgetattr;
/

 

/*
  5、打开文件
  FOPEN:Open A File For Read Operations or Open A File For Write Operations
  use :
    utl_file.fopen(
        <file_location IN VARCHAR2>,   --文件所在目录
        <file_name     IN VARCHAR2>,   --文件名称
        <open_mode     IN VARCHAR2>,   --文件打开方式
        <max_linesize IN BINARY_INTEGER>) --maximum number of characters per line, including the newline character, for this file.
        RETURN <file_type_package_data_type; --返回读取文件的内容
*/
--demo read
DECLARE
  vInHandle utl_file.file_type;
  vNewLine  VARCHAR2(250);
BEGIN
  vInHandle := utl_file.fopen('MY_DIR', 'test1.txt','R');
  LOOP
    BEGIN
      utl_file.get_line(vInHandle, vNewLine);
      dbms_output.put_line(vNewLine);
    EXCEPTION
      WHEN OTHERS THEN
        EXIT;
    END;
  END LOOP;
  utl_file.fclose(vInHandle);
END fopen;
/


--demo write
declare
  vInHandle utl_file.file_type;
begin
  vInHandle := utl_file.fopen('MY_DIR', 'test1.txt', 'w'); 
    utl_file.put_line(vInHandle, 'hello lsxy'); 
  utl_file.fclose(vInHandle);
end;
/


/*
  6.文件删除
    FREMOVE:Delete An Operating System File
    use:
      utl_file.fremove (location IN VARCHAR2, filename IN VARCHAR2);
*/
--demo
BEGIN
  utl_file.fremove('MY_DIR', 'test3.txt');
END fremove;
/

 

/*
  7.文件重命名 or 移动文件
   FRENAME:Rename An Operating System File
   use:
    utl_file.frename (
        location IN VARCHAR2,
        filename IN VARCHAR2,
        dest_dir IN VARCHAR2,
        dest_file IN VARCHAR2,
        overwrite IN BOOLEAN DEFAULT FALSE);  --是否覆盖
*/
--demo 文件重命名
BEGIN
utl_file.frename('MY_DIR','test2.txt','MY_DIR','test2.txt',TRUE);
END frename;
/

--demo 移动文件
BEGIN
utl_file.frename('MY_DIR','test2.txt','TO_DIR','test2.txt',TRUE);
END frename;
/


D:\CRMDATA_bak


/*
  8、获取文件内容
  GET_LINE:Get (read) a line of text from the file
  use: get_line(file   IN file_type,
               buffer OUT VARCHAR2,
               len    IN BINARY_INTEGER DEFAULT NULL);
*/
--demo
DECLARE
  vInHandle utl_file.file_type;
  vNewLine  VARCHAR2(250);
BEGIN
  vInHandle := utl_file.fopen('MY_DIR', 'test1.txt','R');
  LOOP
    BEGIN
      utl_file.get_line(vInHandle, vNewLine);
      dbms_output.put_line(vNewLine);
    EXCEPTION
      WHEN OTHERS THEN
        EXIT;
    END;
  END LOOP;
  utl_file.fclose(vInHandle);
END fopen;
/


/*
  9、
  向文件写入内容
  PUT : Put (write) text to file
  use :
      put(file   IN file_type,
          buffer IN VARCHAR2);
*/
--demo
declare
  vInHandle utl_file.file_type;
begin
  vInHandle := utl_file.fopen('MY_DIR', 'test2.txt', 'w'); 
    utl_file.put(vInHandle, 'lsxy'); 
  utl_file.fclose(vInHandle);
end;
/

 

/*
  10、
    NEW_LINE:Write line terminators to file
    use:
      new_line(file  IN file_type,
               lines IN NATURAL := 1);
*/
--demo
declare
  vInHandle utl_file.file_type;
begin
  vInHandle := utl_file.fopen('MY_DIR', 'test2.txt', 'w'); 
    utl_file.new_line(vInHandle, 2); 
  utl_file.fclose(vInHandle);
end;
/


/*
  11、
   PUT_LINE : Put (write) line to file
*/
--demo
declare
  vInHandle utl_file.file_type;
begin
  vInHandle := utl_file.fopen('MY_DIR', 'test1.txt', 'w'); 
    utl_file.put_line(vInHandle, 'hello lsxy'); 
  utl_file.fclose(vInHandle);
end;
/

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值