oracle 文件操作封装

  1. create or replace package YLFileop_pack is
  2.   -- Author  : YANLEI
  3.   -- Created : 2008-12-24 16:08:02
  4.   -- Purpose : 文件操作包
  5.   YL_DIR CONSTANT varchar2(32) := 'YL_DIR'; --财务表收费FormID
  6.   --从后面查找
  7.   function lastindex(str in varchar2, findstr in varchar2) return integer;
  8.   --获得一个文件的路径
  9.   function getpath(filename in varchar2) return varchar2;
  10.   --获得一个文件的文件
  11.   function getfilename(filename in varchar2) return varchar2;
  12.   procedure writefile(filename in varchar2, str in long);
  13.   function readfile return varchar2;
  14. end YLFileop_pack;
  15. /
  16. create or replace package body YLFileop_pack is
  17.   isto_file utl_file.file_type; --如上
  18.   procedure setoraclepath(path in varchar2) is
  19.     sqlstr varchar2(1024);
  20.   begin
  21.     sqlstr := 'create or replace directory ' || YL_DIR || ' as ''' || path || '''';
  22.     execute immediate sqlstr;
  23.   end;
  24.   --oracle字符串从后面查找 by yanleigis Email:landgis@126.com
  25.   function lastindex(str in varchar2, findstr in varchar2) return integer is
  26.     i     integer;
  27.     num   integer;
  28.     subln integer;
  29.   begin
  30.     num   := length(str);
  31.     subln := length(findstr);
  32.     if subln > num then
  33.       return - 1;
  34.     end if;
  35.     i := num - subln + 1;
  36.     while i > 0 loop
  37.       if substr(str, i, subln) = findstr then
  38.         return i;
  39.       end if;
  40.       i := I - 1;
  41.     end loop;
  42.     return - 1;
  43.   end;
  44.   --获得一个文件的路径
  45.   function getpath(filename in varchar2) return varchar2 is
  46.     idx integer;
  47.   begin
  48.     idx := lastindex(filename, '/');
  49.     if (idx > 0then
  50.       return substr(filename, 1, idx);
  51.     end if;
  52.     return '';
  53.   end;
  54.   --获得一个文件的文件
  55.   function getfilename(filename in varchar2) return varchar2 is
  56.     idx integer;
  57.   begin
  58.     idx := lastindex(filename, '/');
  59.     if (idx > 0then
  60.       return substr(filename, idx + 1);
  61.     end if;
  62.     return '';
  63.   end;
  64.   function openfile(filename in varchar2, state in varchar2) return integer is
  65.     path varchar2(1024);
  66.   begin
  67.     path := getpath(filename);
  68.     setoraclepath(path);
  69.     isto_file := utl_file.fopen(YL_DIR, getfilename(filename), state);
  70.     return 1;
  71.   exception
  72.     when others then
  73.       dbms_output.put_line(sqlcode || ':' || sqlerrm);
  74.       return 0;
  75.   end;
  76.   function openfileread(filename in varchar2) return integer is
  77.   
  78.   begin
  79.     return openfile(filename, 'R');
  80.   end;
  81.   function openfilewrite(filename in varchar2) return integer is
  82.   begin
  83.     return openfile(filename, 'W');
  84.   end;
  85.   procedure writeline(str in varchar2) is
  86.   begin
  87.     utl_file.put_line(isto_file, str); --写入字符串
  88.   end;
  89.   procedure writelinelong(str in long) is
  90.   begin
  91.     utl_file.put_line(isto_file, str); --写入字符串
  92.   end;
  93.   procedure closefile is
  94.     sqlstr varchar2(1024);
  95.   begin
  96.     --utl_file.fflush(isto_file); --刷缓冲
  97.     utl_file.fclose(isto_file); --关闭文件指针  
  98.     sqlstr := 'drop directory ' || YL_DIR;
  99.     execute immediate sqlstr;
  100.   
  101.   end;
  102.   procedure writefile(filename in varchar2, str in long) is
  103.   begin
  104.     if openfilewrite(filename) > 0 then
  105.       writelinelong(str);
  106.     
  107.       closefile();
  108.     
  109.     end if;
  110.   end;
  111.   function readline return varchar2 is
  112.     --读取一行放到  fp_buffer 变量里面
  113.     fp_buffer varchar2(20000); --
  114.     str       varchar2(4000);
  115.   begin
  116.     loop
  117.       begin
  118.         utl_file.get_line(isto_file, str); --读取一行放到  fp_buffer 变量里面
  119.         fp_buffer := fp_buffer || str;
  120.         fp_buffer := fp_buffer || chr(13); --chr(10)
  121.       
  122.       exception
  123.         when no_data_found then
  124.           exit;
  125.       end;
  126.     end loop;
  127.   
  128.     return fp_buffer;
  129.   end;
  130.   function readfile return varchar2 is
  131.     str varchar2(20000);
  132.   begin
  133.     if openfileread('c:/yl.w') > 0 then
  134.       str := readline;
  135.       closefile();
  136.       return str;
  137.     
  138.     end if;
  139.     return '读文件失败';
  140.   end;
  141. end YLFileop_pack;
  142. /
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值