当前位置:数据库 > Oracle >>

Oracle存储过程读文件

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_'|| substr(to_char(sysdate,'YYYYMMDDHH24MISS'),1,10) ||'.txt' ; 
    else 
      lv_filename := v_filename; 
    end if;        
   
     EXECUTE IMMEDIATE 'truncate table T_FINANCING_PRODUCT'; 
    
    --打开一个文件句柄 ,同时fopen的第一个参数必须是大写 
    filehandle := utl_file.fopen('FINANCE_PRODUCT_DIR',lv_filename,'r'); 
    
   Loop    
      begin 
          --将文件信息读取到缓冲区filebuffer中,每次读取一行               
          utl_file.get_line(filehandle,filebuffer);             
          dbms_output.put_line(filebuffer);                             
          --数据文件一行字符串中数据分割符'|'的位置                                                    
          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);      --第二列 
          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     &n
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,