使用存储过程将数据批量导出为多个csv文件(ORACLE)

数据库有如下表结构:
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
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
,发送类别,概率,以及物体在相机坐标系下的xyz.zip目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值