`
maosheng
  • 浏览: 550305 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle 存储过程读文件

阅读更多
create or replace
PROCEDURE PR_FINANCE_PRODUCT_PARSE
(
v_filename  IN  VARCHAR2,   --解析文件名称
v_retvalue  OUT NUMBER      --1为成功,0为失败      
)
AS
    --文件句柄
    filehandle utl_file.file_type;
    --缓冲区
    filebuffer varchar2(255); 
    --文件名
    lv_filename varchar2(100);   
    --文件到表字段的映射
    lv_product_number  varchar2(255);
    lv_product_name    varchar2(255);
    lv_min_capital     varchar2(255);
    lv_max_capital     varchar2(255);
    lv_interest_rate   varchar2(255);
    lv_begin_time      varchar2(255);
    lv_end_time        varchar2(255);
    lv_time_limit      varchar2(255);
    lv_product_status  varchar2(255); 
    --列指针   
    lv_i number;   
    --字符串定位解析指针   
    lv_sposition1 number;
    lv_sposition2 number;
    lv_sposition3 number;
    lv_sposition4 number;
    lv_sposition5 number;
    lv_sposition6 number;
    lv_sposition7 number;
    lv_sposition8 number;
   
     --声明异常
    invalid_data_format  exception;
   
BEGIN
   
    if v_filename is null then
      lv_filename:='finance_product_'|| to_char(sysdate,'YYYYMMDD') ||'.txt' ;
    else
      lv_filename := v_filename;
    end if;       
   
    --打开一个文件句柄 ,同时fopen的第一个参数必须是大写
    filehandle := utl_file.fopen('FINANCE_PRODUCT_DIR',lv_filename,'r');

    --if UTL_FILE.IS_OPEN(filehandle) then   
    --   EXECUTE IMMEDIATE 'truncate table T_FINANCING_PRODUCT';
    --end if;

   Loop   
      begin
          --将文件信息读取到缓冲区filebuffer中,每次读取一行              
          utl_file.get_line(filehandle,filebuffer);            
         dbms_output.put_line(filebuffer); 
         filebuffer:=CONVERT(filebuffer,'UTF8','ZHS16GBK'); --转化汉字,处理乱码 
                     
          --数据文件一行字符串中数据分割符'|'的位置                                                   
          lv_sposition1 := instr(filebuffer, '|', 1,1);  
          lv_sposition2 := instr(filebuffer, '|', 1,2);
          lv_sposition3 := instr(filebuffer, '|', 1,3);
          lv_sposition4 := instr(filebuffer, '|', 1,4);
          lv_sposition5 := instr(filebuffer, '|', 1,5);
          lv_sposition6 := instr(filebuffer, '|', 1,6);
          lv_sposition7 := instr(filebuffer, '|', 1,7);
          lv_sposition8 := instr(filebuffer, '|', 1,8);
         
          --字符串解析正常情况 
          if lv_sposition1 <>0 then                                    
             lv_product_number := substr(filebuffer, 0, lv_sposition1-1);                               --第一列
          else
             raise invalid_data_format;
          end if;
          if lv_sposition2 <> 0 then                                    
             lv_product_name := substr(filebuffer, lv_sposition1+1, lv_sposition2-lv_sposition1-1);
--CONVERT(substr(filebuffer, lv_sposition1+1, lv_sposition2-lv_sposition1-1),'AL32UTF8','ZHS16GBK'); --第二列
          else
             raise invalid_data_format;
          end if;
          if lv_sposition3 <> 0 then                                    
            lv_min_capital := substr(filebuffer, lv_sposition2+1, lv_sposition3-lv_sposition2-1);         --第三列
          else
             raise invalid_data_format;
          end if;
          if lv_sposition4 <> 0 then                                    
             lv_max_capital  := substr(filebuffer, lv_sposition3+1, lv_sposition4-lv_sposition3-1);        --第四列
          else
             raise invalid_data_format;
          end if;  
          if lv_sposition5 <> 0 then                                    
             lv_interest_rate  := substr(filebuffer, lv_sposition4+1, lv_sposition5-lv_sposition4-1);      --第五列
          else
             raise invalid_data_format;
          end if;
           if lv_sposition6 <> 0 then                                    
             lv_begin_time  := substr(filebuffer, lv_sposition5+1, lv_sposition6-lv_sposition5-1);          --第六列 
          else
             raise invalid_data_format;
          end if;
           if lv_sposition7 <> 0 then                                    
              lv_end_time := substr(filebuffer, lv_sposition6+1, lv_sposition7-lv_sposition6-1);             --第七列
          else
             raise invalid_data_format;
          end if;
          if lv_sposition8 <> 0 then                                    
             lv_time_limit  := substr(filebuffer, lv_sposition7+1, lv_sposition8-lv_sposition7-1);            --第八列
             lv_product_status := substr(filebuffer, lv_sposition8+1);                                        --第九列
          else
             raise invalid_data_format;
          end if;
         
          --每列循环完后将信息保存到表中
          dbms_output.put_line('insert data into table');
          insert into T_FINANCING_PRODUCT
          (
          PRODUCT_NUMBER,
          PRODUCT_NAME,
          MIN_CAPITAL,
          MAX_CAPITAL,
          INTEREST_RATE,
          BEGIN_TIME,
          END_TIME,
          TIME_LIMIT,
          PRODUCT_STATUS
          )
          values
          (
          lv_product_number,
          lv_product_name,
          lv_min_capital,
          lv_max_capital,
          lv_interest_rate,
          lv_begin_time,
          lv_end_time,
          lv_time_limit,
          lv_product_status
          );
      exception
             WHEN no_data_found THEN
             exit ;
      end; 
    End Loop;
       delete from T_FINANCING_PRODUCT where to_char(OPERATION_DATE,'YYYYMMDD')=to_char(sysdate-1,'YYYYMMDD');
       commit;
      --关闭句柄       
      utl_file.fclose(filehandle);   
      v_retvalue :=1;   
EXCEPTION
    WHEN invalid_data_format THEN
        v_retvalue :=0;
        rollback;
        dbms_output.put_line('invalid_data_format exception');
    when others then         
       v_retvalue :=0;
       rollback;
       dbms_output.put_line('Othre exception,error code='||sqlcode||',error msg='||sqlerrm); 
END PR_FINANCE_PRODUCT_PARSE;
分享到:
评论

相关推荐

    jdbc连接oracle,执行存储过程,带数据库存储过程

    jdbc连接oracle,执行存储过程,带数据库存储过程,代码是详细的源码,读取配置文件,连接jdbc,执行存储过程。

    java调用oracle存储过程入门实例 增删改查

    java调用oracle存储过程入门实例 增删改查 使用dom4j读取数据库的配置文件(xml) jdbc中connection的管理 使用threadlocal

    oracle 存储过程,批量产生用

    读取txt文件里的用户民,调用存储过程批量创建用户

    .net C# ORACLE带表参数存储过程

    因为.net中的除string类的数据类型外,其它类型要求手动修改UDT自动生成的类文件,本人测试了2天后,才明白要修改UDT自动生成的类文件,此功能特好用,尤其是象财务凭证中子栏的一次更新,要求一次将整张凭证更新到ORACLE,...

    Oracle 主要配置文件介绍

    INTERVAL=60 5 存储追踪和告警文件的路径 user_dump_dest 指定记录 Oracle 用户进程产生的追踪和告警信息的文件的 存放路径 background_dump_dest 指定记录 Oracle 后台进程产生的追踪和 告警信息的...

    Oracle读取excel数据

    本文给大家介绍Oracle读取excel数据的相关知识,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧

    Oracle11g从入门到精通2

    7.3.4 存储过程检查 7.3.5 使用触发器 7.4 避免更改引起的大量改动 7.4.1 使用视图 7.4.2 使用同义名 7.4.3 使用光标 第8章 数据库用户管理 8.1 授予权限 8.1.1 直接授权 8.1.2 授权角色 8.1.3...

    Oracle11g从入门到精通

    7.3.4 存储过程检查 7.3.5 使用触发器 7.4 避免更改引起的大量改动 7.4.1 使用视图 7.4.2 使用同义名 7.4.3 使用光标 第8章 数据库用户管理 8.1 授予权限 8.1.1 直接授权 8.1.2 授权角色 8.1.3 使用OEM的...

    构建最高可用Oracle数据库系统 Oracle 11gR2 RAC管理、维护与性能优化

    5.1.1数据读一致性与写一致性 5.1.2多版本数据块 5.1.3 ANSIISO事务隔离级别 5.1.4 Oracle事务隔离级别 5.1.5锁管理器 5.2 RAC资源的协调和管理 5.2.1 Cache Fusion的结构 5.2.2 Cache Fusion工作原理 5.2.3...

    ORACLE9i_优化设计与系统调整

    §1.2 Oracle文件 26 §1.2.1 数据文件 26 §1.2.2 控制文件 26 §1.2.3 重做日志文件 26 §1.2.4 其它支持文件 26 §1.3 数据块、区间和段 28 §1.3.1 数据块(data block) 28 §1.3.2 区间(extent) 28 §1.3.3 ...

    深入解析Oracle.DBA入门进阶与诊断案例

    针对数据库的启动和关闭、控制文件与数据库初始化、参数及参数文件、数据字典、内存管理、Buffer Cache与Shared Pool原理、重做、回滚与撤销、等待事件、性能诊断与SQL优化等几大Oracle热点主题,本书从基础知识入手...

    Oracle.11g.从入门到精通 (2/2)

    7.3.4 存储过程检查 7.3.5 使用触发器 7.4 避免更改引起的大量改动 7.4.1 使用视图 7.4.2 使用同义名 7.4.3 使用光标 第8章 数据库用户管理 8.1 授予权限 8.1.1 直接授权 8.1.2 授权角色 8.1.3 使用OEM的“安全管理...

    Oracle.11g.从入门到精通 (1/2)

    7.3.4 存储过程检查 7.3.5 使用触发器 7.4 避免更改引起的大量改动 7.4.1 使用视图 7.4.2 使用同义名 7.4.3 使用光标 第8章 数据库用户管理 8.1 授予权限 8.1.1 直接授权 8.1.2 授权角色 8.1.3 使用OEM的“安全管理...

    JDBC连接操作Oracle及Mysql详解

    JDBC连接Oracle 11g及Mysql5,涉及传参,反射,读取属性文件,预处理,(预处理)批处理,带参数的存储过程,事务处理,可滚动的结果集,可更新的结果集

    赤兔Oracle数据库恢复软件 v11.6.zip

    1.不需要运行Oracle数据库软件,EOR直接读取数据库文件解析数据。支持ASM,能够直接从ASM磁盘中导出数据,即使相关的磁盘组不能成功mount 2.支持从ASM中直接抽取出数据文件和其他任意存储在ASM中的文件(包括控制...

    最全的oracle常用命令大全.txt

    8、存储函数和过程 查看函数和过程的状态 SQL&gt;select object_name,status from user_objects where object_type='FUNCTION'; SQL&gt;select object_name,status from user_objects where object_type='PROCEDURE';...

    toad for oracle 11

    TOAD® 是 Quest Software公司的系列化Oracle开发和管理工具套件,包含集成化的开发、测试、管理与优化功能,可以大大提高数据库开发和管理人员的工作效率。 轻松浏览和管理Oracle数据库 TOAD 的 Schema Browser...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。 常见的数据模型 1. 层次结构模型: 层次结构模型实质上是一种有根结点的定向有序树,IMS...

Global site tag (gtag.js) - Google Analytics