`
maosheng
  • 浏览: 565410 次
  • 性别: 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;
分享到:
评论

相关推荐

    oracle存储过程unwrap解密工具.zip

    Oracle存储过程unwrap解密工具主要用于处理Oracle数据库中的加密存储过程。在Oracle数据库系统中,为了保护敏感代码或数据,开发人员有时会选择对存储过程进行加密。然而,当需要查看、调试或恢复这些加密的存储过程...

    ORACLE的存储过程的异步调用

    ORACLE 存储过程的异步调用 本文讨论了 ORACLE 存储过程的异步调用方法,旨在解决客户端长时间等待存储过程执行的问题。主要思路是使用 DBMS_JOB 包将主处理存储过程作为任务提交到任务队列中,并通过 DBMS_PIPE 包...

    oracle存储过程加密

    ### Oracle存储过程加密知识点 #### 一、Oracle存储过程与加密背景 在Oracle数据库中,存储过程是一种数据库对象,它可以包含一系列SQL语句和过程化SQL代码,用于执行复杂的业务逻辑。存储过程不仅可以提高应用...

    Oracle存储过程中任务和管道的应用

    Oracle 存储过程中任务和管道的应用 Oracle 存储过程中任务和管道的应用是指在 Oracle 数据库中使用任务和管道来异步调用存储过程的方法。这种方法可以解决客户端调用存储过程后长时间没有反应的问题,并且可以实时...

    Oracle存储过程读写文件[文].pdf

    通过这种方式,Oracle存储过程可以轻松地将数据库中的数据导出到文件,或者将文件中的数据导入到数据库中,为数据交换提供了便利。 总之,Oracle的存储过程结合UTL_FILE包,能够实现对文件系统的直接操作,增强了...

    VC做的小东西,测试oracle存储过程

    压缩包内的文件很可能是源代码、编译后的可执行文件、配置文件或者是测试用例,用于演示如何通过VC++调用Oracle存储过程。可能包括数据库连接代码、存储过程调用的示例以及数据处理逻辑。分析这些文件可以进一步了解...

    oracle 存储过程,批量产生用

    在IT领域,尤其是在数据库管理与开发中,Oracle存储过程是一种常用的技术手段,用于实现复杂的业务逻辑、数据处理和批量操作。根据给定的文件信息,本文将深入探讨Oracle存储过程如何用于批量创建用户,以及如何读取...

    oracle 存储过程

    Oracle存储过程不仅包括SQL语句,还可以包含PL/SQL(Oracle的编程语言)块,如条件判断、循环结构、异常处理等,极大地提高了数据库操作的效率和灵活性。 1. **存储过程的创建**: 创建存储过程的基本语法是`...

    Oracle存储过程out游标

    在这个场景中,我们有三个文件:TESTPACKAGE.txt,CURSOR_TEST2.txt和OracleProcedure.java,分别涉及Oracle存储过程的创建、游标的使用以及Java代码如何与Oracle存储过程交互。 首先,`TESTPACKAGE.txt`很可能包含...

    oracle 存储过程的加密

    Oracle 存储过程的加密是保护数据库中敏感信息和商业逻辑的重要手段,特别是当存储过程包含敏感算法或者商业秘密时。Oracle 提供了两种方法来加密存储过程:使用 `wrap` 工具和 `dbms_ddl` 包。 1. **wrap 工具** ...

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

    总结来说,这个入门实例涵盖了使用Java通过JDBC调用Oracle存储过程进行CRUD操作的基本流程,以及利用DOM4J解析XML配置文件和`ThreadLocal`管理数据库连接的方法。这样的设计使得程序更加模块化,易于维护,同时也...

    使用oracle存储过程将xml文件数据导入数据库

    本文将详细讲解如何使用Oracle存储过程完成这一任务,并提供源代码和相关截图辅助理解。 首先,理解XML文件:XML(Extensible Markup Language)是一种用于标记数据的语言,它的结构清晰、可读性强,常用于数据交换...

    ORACLE存储过程,函数,包,游标

    在《ORACLE存储过程,函数,包,游标》这个文本文件中,可能包含了关于如何定义、调用和管理这些对象的示例代码和实践指导。通过阅读和理解这个文件,开发者能够深入了解Oracle数据库的动态编程能力,提升其在数据库...

    批量修改Oracle序列值的存储过程

    如果序列列表在文本文件中,可能需要先读取文件,然后循环调用存储过程。 总之,批量修改Oracle序列值的存储过程是一个实用的工具,能够提高数据库维护的效率。但请注意,直接修改序列值可能会对依赖序列的业务逻辑...

    ORACLE存储过程判断非法字符

    本话题将深入探讨如何在Oracle存储过程中检查和处理非法字符。 首先,我们需要明确什么是非法字符。在数据库上下文中,非法字符通常指的是那些可能导致SQL注入、数据格式错误或者不符合数据库字段定义的字符,如单...

    CodeSmtih生成Oracle存储过程

    在本案例中,我们聚焦于如何使用CodeSmith来生成Oracle存储过程,特别是基于数据库表结构自动生成存储过程。 Oracle存储过程是预编译的SQL语句集合,可以包含数据处理逻辑,控制流语句以及用户定义的函数和过程。...

    加密Oracle存储过程.doc

    Oracle数据库中的存储过程是数据库管理员和开发者常用的工具,用于封装一系列的SQL和PL/SQL语句,以便在需要时重复调用。为了增强安全性,有时我们需要对这些存储过程进行加密,防止未授权的访问和阅读。本文将详细...

    dba.rar_closelyq1i_diehbl_java_oracle_oracle 存储过程

    Oracle存储过程是数据库管理系统中的一种重要功能,它允许程序员或DBA编写一组SQL语句和PL/SQL代码,然后以单个对象的形式存储在数据库中。这样,这些过程可以被多次调用,减少了网络流量,提高了性能,并且使得代码...

Global site tag (gtag.js) - Google Analytics