问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ORACLE导出结果集为CSV文件

发布网友 发布时间:2022-04-29 17:43

我来回答

4个回答

懂视网 时间:2022-04-30 14:42

数据库有如下表结构:
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:	mp‘;
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文件

标签:

热心网友 时间:2022-04-30 11:50

在sqlplus里面就可以做到的
set pages
set lines 200
set colsep ','
spool on 'e:\111.csv'
select o.biostime_id,o.mama100_username from hyt_user_asso o;
spool off;

热心网友 时间:2022-04-30 13:08

建议还是用plsql把数据写出来 再用sqlldr来导 这样还可以自己控制日志

热心网友 时间:2022-04-30 14:43

推荐用java 自己客制化一个程序,100行左右代码可以搞定。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
说课包括哪些方面 说课内容包括()。 如何在手机百度上删除对话记录? 结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? 解释在SQL Server 2008中,数据库中的数据完整性怎样得到保证,请举例说明 电脑怎么解除QQ情侣空间啊? 电脑上怎么删除QQ情侣空间? QQ空间情侣主页在电脑上怎么删除 跪求......... 用电脑如何解除QQ情侣空间,,急急急。。。 为什么很多人都听到过从楼上传来的钢珠掉在地上的声音? 本地声音怎么弄? 重物掉地下的声音怎么形容词 形容踩地的声音的词语 填写四字词语: ( )的声音、( )地叫唤 ( )地撤退 ( )地指挥 ( )地声音 ()地山路 填写四字词语:()的声音,()地叫唤 ()地声音 ()地时刻 ()地遭遇()地战斗 ()地面对 ()地呼吁 什么地声音填词语 地响声前面加个什么词 填空题:( )地声音 在上海 个人信用贷款的申请条件有哪些呢? 上海个人消费类贷款条件是什么? 贵州和云南的油价是不是一样的? 微信群里一个人的头像别人看到的我看到的不一样,微信也是更新过的,刷新了好几次还是这样为什么? oracle 如何把表导出csv oracle数据库可否批量导出存储过程 oracle数据库导出40万条数据csv要多久 小数除法计算步骤? 小数除小数除法竖式计算过程 如何把.dmp格式的数据文件导进oracle,再导出成如xls,csv等格式的... oracle 从本地服务器读取CSV文件的数据,插入到数据表里。数据文件可能... 小数除法计算是什么? 利用java实现定时将oracle数据导出为csv形式 小数除法计算方法 oracle数据库 怎么自动生成csv文件 PPT背景可以自己做吗? Oracle中用哪个命令可以批量导出存储过程 oracle 存储过程导出csv,可以直接导出到其他机器上么 小学五年级,小数除法的步骤!最好打字 从oracle数据库中导出大量数据到excel中为什么自动分成了好几个excel... 如何使用Oracle SQL Developer 同时导出多张表? oracle存储过程查数据并生成文件怎么实现? 人保车险理赔所需资料 请问 人保车险 报销需要些什么手续