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

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;

commit;

–关闭句柄

utl_file.fclose(filehandle);

v_retvalue :=1;

EXCEPTION

WHEN invalid_data_format THEN

v_retvalue :=0;

dbms_output.put_line(‘invalid_data_format exception’);

when others then

v_retvalue :=0;

dbms_output.put_line(‘Othre exception,error code=’||sqlcode||’,error msg=’||sqlerrm);

END PR_FINANCE_PRODUCT_PARSE;

oracle存储过程文件在哪,Oracle存储过程读文件-Oracle相关推荐

  1. C++之文件操作探究(四):读文件——二进制文件

    相关博文:C++之文件操作探究(一):写文件--文本文件 相关博文:C++之文件操作探究(二):读文件--文本文件 相关博文:C++之文件操作探究(三):写文件--二进制文件 相关博文:C++之文件操 ...

  2. C++之文件操作探究(二):读文件——文本文件

    相关博文:C++之文件操作探究(一):写文件--文本文件 相关博文:C++之文件操作探究(二):读文件--文本文件 相关博文:C++之文件操作探究(三):写文件--二进制文件 相关博文:C++之文件操 ...

  3. 读一个文件的java程序_java 读文件的几种方法(一)

    先前使用一直很混乱的使用过这些方法,但都没有好好做过总结. 这两天趁有空,小结一下. 1.输入输出流 说起 java的 读写文件不得不说java中的输入输出流对象, 被读取的对象为输入流(如某个文件, ...

  4. python将txt文件转化为矩阵_python 读文件,然后转化为矩阵的实例

    代码流程: 1. 从文件中读入数据. 2. 将数据转化成矩阵的形式. 3. 对于矩阵进行处理. 具体的python代码如下: - 文件路径需要设置正确. - 字符串处理. - 字符串数组到 整型数组的 ...

  5. java按行写入txt文件内容_JAVA编程:读文件,按行输出文件内容

    展开全部 其实你贴的代码并没有问题 不过你可能也发现了,出现了乱码.当然这个乱码不是必e5a48de588b6323131333532363134313032313635333133333761383 ...

  6. golang文件操作:打开关闭文件,带缓冲区的读文件

  7. python读文件操作-python 之文件操作

    使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('thefile.txt') try ...

  8. PrintWriter和Scanner的综合运用写文件并读文件

    下用PrinterWriter写入文件,再用Scanner读文件输出 package textfile; import java.io.*; import java.util.*; public cl ...

  9. python 读文件写数据库_python读文件写数据库

    Python 读文件,写数据库 Python 读文件 打开文件 Python读写文件在计算机语言中被广泛的应用,如果你想了解其应用的程序,以下的文章会给你详细的介绍相关内容,会你在以后的学习的过程中有 ...

  10. c/c++入门教程 - 2.5 文件操作、fstream(write写文件、read读文件、ios::binary二进制文件读写)

    目录 2.5 文件操作 2.5.1 文本文件 2.5.1.1 写文件 2.5.1.2 读文件 2.5.2 二进制文件 2.5.2.1 二进制写文件 2.5.2.2 二进制读文件 2.5 文件操作 程序 ...

最新文章

  1. Android异步处理二:AsynTask介绍和使用AsyncTask异步更新UI界面
  2. MySQL导入导出命令
  3. Qt学习笔记,再次分析EVA源码之后得出的结论-QListView,QListViewItem(Qt3);Q3ListView,Q3ListViewItem(Qt4)...
  4. 完美实现类似QQ的自拍头像、上传头像功能!(Demo 源码)
  5. JAVA中判断一个字符串是否包含另一个字符串
  6. [UI]抽屉菜单DrawerLayout分析(三)
  7. webpack工具知多少(上篇)
  8. win7+VS2015+OpenCV3.20的搭建
  9. Cocos Shader入门基础七:一文彻底读懂深度图。
  10. Android 6.0指纹识别App开发demo
  11. 传奇列表获取失败与登录器太老怎么解决
  12. Matlab求出图像中每个细胞的细胞核与核仁面积之比代码
  13. kindeditor4.1.10图片上传配置及使用说明
  14. 获取中国移动光猫H2-2超管密码
  15. python ldap3获取所有用户信息_Python使用Ldap3进行Windows AD域管理
  16. Vue之集成阿里云滑块验证
  17. EndNote参考文献管理与编辑软件
  18. 开启Demond Page需要的步骤(By Walle@ARMCE)
  19. 安装 CICS TXS
  20. windows,win10如何离线安装chrome

热门文章

  1. 十进制进制法_关于二进制、十进制、八进制、十六进制数据转换计算方法详细总结...
  2. SWING中模拟键盘输入例子
  3. 微信发送图文消息,查看图文media_id
  4. bind9 dlz mysql_利用BIND+DLZ+MYSQL构建企业智能DNS
  5. Kotlin和Swift语言在Redmonk榜上排名大幅提升
  6. wpf初学者-wpf控件简单介绍
  7. 企业以太坊联盟:区块链挑战者
  8. 顾客银行办理业务时,首先在取号机上取号,然后坐在椅子上等候业务员叫号时前往窗口办理业务,假设银行现在有3个窗口可办理业务,请采用信号量和PV操作描述顾取号等候叫号和银行业务员叫号办理业务的同步操作。
  9. zip压缩文件处理方案(Zip4j压缩和解压)
  10. Sorry, The number you dialed is power off.