使用存储过程将Oracle数据批量导出为多个csv文件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用存储过程将Oracle数据批量导出为多个csv文件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3528字,纯文字阅读大概需要6分钟。
内容图文
![使用存储过程将Oracle数据批量导出为多个csv文件](/upload/InfoBanner/zyjiaocheng/457/6eabc407df60418d9dadbf08505d3f4a.jpg)
数据库有如下表结构:
user_info ( user_id NUMBER primary key, user_name VARCHAR2(200) NOT NULL, user_age VARCHAR2(80), create_date DATE, create_order NUMBER )
现在有100万条记录,要求每1000条记录导出为一个csv文件,内容用逗号分隔,共计1000个文件,
文件名称格式为output1.csv,output1.csv......output1000.csv。
/* ==================== 第一步:创建一张表 ==================== */ CREATE TABLE USER_INFO ( USER_ID NUMBER PRIMARY KEY, USER_NAME VARCHAR2(200) not null, USER_AGE VARCHAR2(80), CREATE_DATE DATE, CREATE_ORDER NUMBER )
/* ==================== 第二步:初始化数据、粘贴在命令行执行 ==================== */ declare i number; v_age number; begin i:=0; for i in 1..1000000 loop --随机生成1~100的数字 select round(mod(dbms_random.value*100,100)) into v_age from dual; insert into user_info(user_id,user_name,user_age,create_date,create_order) values(SEQ_ALL_TABLE.NEXTVAL ,‘翁林‘||i,v_age,sysdate,i); --每1000行提交一次 if mod(i,1000) = 0 then commit; end if; end loop; end;
/* ==================== 第三步:具体过程实现 一次性将100万条记录全部查询出来放到游标中,每1000条写一个文件,
经测试,使用游标方式,使用该表初始化的数据,整个过程执行时长大致40s左右。 ==================== */ create or replace procedure export_to_csv( --1、入口参数部分 p_dir varchar2 )is --2、内部变量部分 v_errorcode varchar2(30); v_errormsg varchar2(100); --显示游标、一次性将数据全部读完 cursor mycur is select * from user_info order by user_id; --如果不排序,你将发现写入结果顺序将达不到你的期望,该懂得的。 --行记录 myrecord user_info%rowtype; csv_output utl_file.file_type; out_file_name varchar2(20); begin_time number; end_time number; count_num number; begin --3、主体部分 begin_time :=dbms_utility.get_time; open mycur; for i in 1..1000 loop out_file_name := ‘output‘||i||‘.csv‘; csv_output := utl_file.fopen(p_dir,out_file_name,‘W‘); count_num := 0; while count_num < 1000 loop --每1000行写入一个文件 fetch mycur into myrecord; utl_file.put_line(csv_output ,myrecord.user_id|| ‘,‘ || myrecord.user_name||‘,‘|| myrecord.user_age||‘,‘|| to_char(myrecord.create_date,‘YYYY-MM-DD HH24:MI:SS‘)||‘,‘|| myrecord.create_order); count_num := count_num + 1; end loop; utl_file.fclose(csv_output); end loop; close mycur; end_time := dbms_utility.get_time; dbms_output.put_line(‘total time=‘ || (end_time-begin_time)*10 || ‘ms.‘); --4、异常处理 exception when others then v_errorcode:=sqlcode; v_errormsg :=sqlerrm; rollback; --输出异常信息 dbms_output.put_line(v_errorcode||v_errormsg); end export_to_csv;
/* ==================== 第四步:创建输出目录,并授权给相关用户 ==================== */ CREATE or replace DIRECTORY MYDIR AS ‘d:\tmp\‘; GRANT READ,WRITE ON DIRECTORY MYDIR TO wenglin; /* ==================== 第五步:命令行执行,查看输出文件
若想看到命令行打印结果,请执行:set serveroutput on ==================== */ exec export_to_csv(‘MYDIR‘);
其他说明:该示例参考:http://blog.csdn.net/chjttony/article/details/7466159
使用存储过程将Oracle数据批量导出为多个csv文件
标签:
本文系统来源:http://www.cnblogs.com/shengs/p/4784802.html
内容总结
以上是互联网集市为您收集整理的使用存储过程将Oracle数据批量导出为多个csv文件全部内容,希望文章能够帮你解决使用存储过程将Oracle数据批量导出为多个csv文件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。