日期:2014-05-16  浏览次数:20358 次

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);