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