Oracle存储过程读文件
Oracle存储过程读文件create or replacePROCEDURE 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;BEGINif v_filename is null thenlv_filename:='finance_product_'|| substr(to_char(sysdate,'YYYYMMDDHH24MISS'),1,10) ||'.txt' ;elselv_filename := v_filename;end if;EXECUTE IMMEDIATE 'truncate table T_FINANCING_PRODUCT';--打开一个文件句柄 ,同时fopen的第一个参数必须是大写filehandle := utl_file.fopen('FINANCE_PRODUCT_DIR',lv_filename,'r');Loopbegin--将文件信息读取到缓冲区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 thenlv_product_number := substr(filebuffer, 0, lv_sposition1-1); --第一列elseraise invalid_data_format;end if;if lv_sposition2 <> 0 thenlv_product_name := substr(filebuffer, lv_sposition1+1, lv_sposition2-lv_sposition1-1); --第二列elseraise invalid_data_format;end if;if lv_sposition3 <> 0 thenlv_min_capital := substr(filebuffer, lv_sposition2+1, lv_sposition3-lv_sposition2-1); --第三列elseraise invalid_data_format;end if;if lv_sposition4 <> 0 thenlv_max_capital := substr(filebuffer, lv_sposition3+1, lv_sposition4-lv_sposition3-1); --第四列elseraise invalid_data_format;end if;if lv_sposition5 <> 0 thenlv_interest_rate := substr(filebuffer, lv_sposition4+1, lv_sposition5-lv_sposition4-1); --第五列elseraise invalid_data_format;end if;if lv_sposition6 <> 0 then &n上一个:Oracle-ddl相关命令
下一个:删除oracle当前用户下的所有对象
- 更多Oracle疑问解答:
- 运行exp备份oracle数据库提示oracle-12154错误
- 有没有,生产Oracle Rman 备份脚本的工具啊!
- 初学orcle,希望有大大帮忙解说一下详细步骤,从登录oracle到创建表的过程
- oracle语句问题:一张user表,三个字段,id,name,time,插入记录比如:张三2007,李四2008,张三2011
- 如何写一个ORACLE触发器同步两个表中的数据?
- oracle 如何查看一个服务器上有多少个数据库.
- oracle 创建包的时候错误 求解
- oracle 重复列的问题
- oracle 中如何查处2星期前的数据
- 请教oracle数据库安装中的问题
- 请问谁能提供给我标准的oracle ERP的数据库表结构并详细说明各表主要的作用?
- 安装oracle遇到的问题 invalid entry CRC (expected 0x3e12e795 but got 0x9db0e9fd)
- 我的是ORACLE 10G,在RMAN中如何按指定的时间恢复数据文件啊?
- oracle为什么没有自动增长列
- oracle快捷键都有哪些啊?