添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
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; ====================   第三步:具体过程实现   一次性将100万条记录全部查询出来放到游标中,每1000条写一个文件,
   经测试,使用游标方式,使用该表初始化的数据,整个过程执行时长大致40s左右。
====================
create or replace procedure export_to_csv(
--1、入口参数部分
       p_dir varchar2
--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
数据库有如下表结构:user_info (   user_id           NUMBER primary key,  user_name     VARCHAR2(200) NOT NULL,         user_age        VARCHAR2(80),  create_date    DATE,  create_order   NUMBER)现在有100 优点:高效;支持功能较多;用户只需有对应表查询权限;可以在从库执行 缺点:目前已没有再维护,只能找到基于 oracle 10.2的版本(高版本目前还可以用);密码必须要跟在用户名后面输,安全性不足 2. 下载安装 百度云链接:https://pan.baidu.com. P_QUERY IN VARCHAR2, -- PLSQL文 P_DIR IN VARCHAR2, -- 导出 文件 放置目录 P_ FILE NAME IN VARCHAR2 -- CSV 名 L_ OUTPUT UTL_ FILE . FILE _TYPE; L_THECURSO...
参考文章: Bcp 使用 心得: http://www.cnblogs.com/puke/archive/2013/06/05/3119378.html 定时 导出 csv 文件 : http://www.dearda.com/index.php/archives/1283 导出 csv 文件 A  全局临时表 if OBJECT_ID('tempdb..##table') is not nul
我通过这个方法,按照字段筛选 数据 ,并分别 导出 多个 csv 文件 :  (1)首先创建 存储 一个过程,如下,直接复制粘贴即可 。这个 存储过程 可以直接 使用 ,因为它是通用的,只需要你传入SQL和生成 文件 的路径就可以。 如果你想多了解一下的话,可以搜一搜 oracle 内置utl_ file 读写 文件 包 ,每分钟大约处理百万行。适用于大量 导出 的情况 CREATE OR REPLAC...