数据库有如下表结构:
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文件的更多相关文章

  1. oracle数据导入/导出

    Oracle数据导入导出imp/exp 功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份.   大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据 ...

  2. Oracle数据导入导出

    Oracle数据导入导出imp/exp 在oracle安装目录下有EXP.EXE与IMP.EXE这2个文件,他们分别被用来执行数据库的导入导出.所以Oracle数据导入导出imp/exp就相当与ora ...

  3. Oracle数据导入导出imp/exp

    功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份. 大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢失). Oracle有个好处,虽然你的电 ...

  4. Oracle数据导入导出imp/exp sp2-0734:未知的命令开头'imp...解决方法

    Oracle数据导入导出imp/exp sp2-0734:未知的命令开头'imp...解决方法   sp2-0734:未知的命令开头'imp 忽略了剩余行默认分类   www.2cto.com  应该 ...

  5. Oracle数据导入导出imp/exp(转)

    在oracle安装目录下有EXP.EXE与IMP.EXE这2个文件,他们分别被用来执行数据库的导入导出.所以Oracle数据导入导出imp/exp就相当与oracle数据还原与备份. 一.Oracle ...

  6. Oracle 数据导入导出操作 (转)

    Oracle数据导入导出imp/exp 功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份. 大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢 ...

  7. Oracle数据导入导出imp/exp命令 10g以上expdp/impdp命令

    Oracle数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中. 利 ...

  8. Oracle数据导入导出命令

    IMP 和EXP命令 Oracle数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处 ...

  9. oracle数据导入/导出(2)

    Oracle数据导入导出imp/exp 功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份. 大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢 ...

随机推荐

  1. PCIE的DMA和PIO介绍

    墨尘 百家号01-2422:14 在PCIE中有两种数据传输方式: DMA(Direct Memory Access),直接内存访问,在该模式下,数据传送不是由CPU负责处理,而是由一个特殊的处理器D ...

  2. 关于XILINX芯片IO管脚的上拉电阻的疑问

    XILINX的每个IO脚都有一个可选的可配上拉电阻功能,现在我在配置文件的UCF里使用了这个上拉电阻:语法如下:NET"I_key_data"        LOC = " ...

  3. angular学习笔记(二十四)-$http(2)-设置http请求头

    1. angular默认的请求头: 其中,Accept 和 X-Requested-With是$http自带的默认配置 Accept:application/json,text/plain       ...

  4. 每日英语:No Consensus: China Debate on Women's Roles

    A woman's place is in the home. consensus:一致,舆论,合意 That was the resounding message from Jiang Xipei, ...

  5. uboot的lds文件分析

    OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") ...

  6. 【转】Oozie4.2.0配置安装实战

    什么是Oozie? Oozie是一种Java Web应用程序,它运行在Java servlet容器——即Tomcat——中,并使用数据库来存储以下内容: 工作流定义 当前运行的工作流实例,包括实例的状 ...

  7. HDS(日立)AMS2000系列存储管理配置方法

    转自:老管网络日志 配置日立存储AMS2000系列时也要和IBM存储一样,首先在客户端或者管理机上安装一个客户端,通过这个客户端再去管理存储. 管理软件名称为Storage Navigator Mod ...

  8. freemarker插值

    http://blog.csdn.net/chang_li/article/details/51913105 在复杂页面上(包含大量判断.日期金额格式化)的页面上,freemarker的性能比使用ta ...

  9. Python3 Scrapy 安装方法

    Python3 Scrapy 安装方法 (一脸辛酸泪) 写在前面 最近在学习爬虫,在熟悉了Python语言和BeautifulSoup4后打算下个爬虫框架试试. 没想到啊,这坑太深了... 看了看相关 ...

  10. iphone 6plus 下app里的状态栏和界面会被放大的问题//以及设置APP闪屏页/APP图标流程

    //设置APP闪屏页/APP图标流程如下 2.6Plus界面显示变大以及APP图标变大是由于上面图片的AppIcon以及LaunchImage造成的,主要是由于找不到对应的3x图片,或者改3x图片尺寸 ...