批量生成大数据量的SQL脚本

业务逻辑:利用游标从数据库中现有的表数据,查询出部分属性,来插入到目标表中,来在目标表中生成大批量的数据,SQL实现如下:

create or replace procedure add_subscription_c(i_count in number,-- i_count输入值为循环插入记录的次数
                                           i_usersegment  in varchar2,
                                             i_startaccount in number,
                                             o_resultcode   out number,
                                             o_resulstring  out varchar2) as
  v_count             number;
  v_startcount        number;
  v_sql               varchar2(1024);
  v_subscriber        zxdbm_ismp.ssrv_subscription.subscriber%type; --订购方号码
  v_usercode          zxdbm_ismp.ssrv_subscription.usercode%type; --使用号码
  v_payuser           zxdbm_ismp.ssrv_subscription.payuser%type; --付费号码
  v_servicekeyid      zxdbm_ismp.ssys_service_type.servicekeyid%type; --内部业务键id
  v_status            zxdbm_ismp.ssrv_subscription.status%type; --状态0-待生效;1-正常;2:暂停+待生效;3:暂停;4:待失效;5:暂停+待失效;6:注销,
  v_subscriptionindex zxdbm_ismp.ssrv_subscription.subscriptionindex%type; --定购关系顺序号
  v_serviceindex      zxdbm_ismp.ssrv_subscription.serviceindex%type; --业务序号
  v_serviceid         zxdbm_ismp.ssrv_subscription.serviceid%type; --新业务ID
  v_productid         zxdbm_ismp.ssrv_subscription.productid%type; --产品ID
  v_productindex      zxdbm_ismp.ssrv_subscription.productindex%type; --产品序号
  v_cpid              zxdbm_ismp.ssrv_subscription.cpid%type; --CPID
  v_cpindex           zxdbm_ismp.ssrv_subscription.cpindex%type; --CP序号
  v_corpindex         zxdbm_ismp.ssrv_subscription.corpindex%type; --集团序号
  v_corpid            zxdbm_ismp.ssrv_subscription.corpid%type; --集团ID
  v_msisdntype        zxdbm_ismp.ssrv_subscription.msisdntype%type; --用户号码类型,1-msisdn,2-phs,3-pstn,4-IPTV接入号, 5-宽带接入号,6-固定IP
  v_servicetype       zxdbm_ismp.ssrv_subscription.servicetype%type; --业务能力类型
  v_newCode           zxdbm_ismp.ssrv_subscription.usercode%type;
  v_subnumber         number(10);
  type cur_t is ref cursor;
  cur_product cur_t;
begin
  --缺省为300 000000
  v_startcount := 30000000;
  if i_startaccount is not null then
    v_startcount := i_startaccount;
  end if;
  --构造用户号码
  v_usercode := '191';
  if i_usersegment is not null then
    v_usercode := i_usersegment;
  end if;
  v_msisdntype := 1;
  v_corpindex  := 0;
  v_corpid     := ' ';
  -------------------------------------------------------------------------
  -------------------------------------------------------------------------
  v_subnumber := v_startcount;
  v_count     := v_startcount;
  -- i_count输入值为循环的次数 v_count为缺省0
  while v_count <= (v_startcount + i_count) loop
    --组合生成号码
    v_newCode := v_usercode || v_count;
    --从产品表中找一条现成的数据来得到订购关系表中一些属性值来插入订购关系
    open cur_product for 'select servicetype,serviceindex,serviceid,productindex,productid,status,cpid,cpindex from v_ssrv_product where productid =111100009020000000030';
    loop
      fetch cur_product
        into v_servicetype, v_serviceindex, v_serviceid, v_productindex, v_productid, v_status, v_cpid, v_cpindex;
      sp_get_next_seq('slp_order_prdindex', v_subscriptionindex);
      exit when cur_product%notfound;
      insert into zxdbm_500.s500_user_subscription
        (subscriptionindex,
         subscriptionid,
         servicetype,
         serviceindex,
         serviceid,
         productindex,
         productid,
         corpindex,
         corpid,
         subscriber,
         usercode,
         payuser,
         status,
         msisdntype,
         cpid,
         cpindex)
      values
        (v_subscriptionindex,
         v_newCode||v_subscriptionindex,
         v_servicetype,
         v_serviceindex,
         v_serviceid,
         v_productindex,
         v_productid,
         v_corpindex,
         v_corpid,
         v_newCode,
         v_newCode,
         v_newCode,
         v_status,
         v_msisdntype,
         v_cpid,
         v_cpindex);
      v_subnumber := v_subnumber + 1;
    end loop;
    --每1000条commit一次 或 v_count=v_startcount+循环次数
    if mod(v_subnumber, 1000) = 0 or v_count = (v_startcount + i_count)   then
      commit;
    end if;
    --在v_startcount的基础上+1
    v_count    := v_count + 1;
    v_usercode := i_usersegment;
  end loop;
  o_resultcode  := 0;
  o_resulstring := v_count || 'Success';
  commit;
exception
  when others then
    rollback;
    o_resultcode  := SQLCODE;
    o_resulstring := v_newCode || ':' || SQLCODE || ':' || SQLERRM;
end ;

时间: 2024-10-26 21:16:18

批量生成大数据量的SQL脚本的相关文章

大数据量下的SQL Server数据库自身优化

1.1:增加次数据文件 从SQL SERVER 2005开始,数据库不默认生成NDF数据文件,一般情况下有一个主数据文件(MDF)就够了,但是有些大型的数据库,由于信息很多,而且查询频繁,所以为了提高查询速度,可以把一些表或者一些表中的部分记录分开存储在不同的数据文件里 由于CPU和内存的速度远大于硬盘的读写速度,所以可以把不同的数据文件放在不同的物理硬盘里,这样执行查询的时候,就可以让多个硬盘同时进行 查询,以充分利用CPU和内存的性能,提高查询速度. 在这里详细介绍一下其写入的原理,数据文件

----------------------大数据量sql问题

问题描述 ----------------------大数据量sql问题 数据库:GP问题:A表中有一列a,记录总数为1000w:B表中也有一列a,记录总数为500w: 现在需要塞选A.a在B.a出现过; sql怎么写效率高?select count(distinct a) from A where a in (select B.a from B); select count(distinct A.a) from A left join B on A.a=B.a where B.a<>null

大数据量下的数据库查询与插入如何优化? (整理)

数据库经常要做一些查询与插入,但是如果查询和插入的数据量过大的时候就会引发数据库性能问题,降低数据库工作效率.因此性能调优是大家在工作中都能够预见的问题,大到世界五百强的核心系统,小到超市的库存系统,几乎都会有要调优的时候.面对形形色色的系统,林林总总的需求,调优的手段也是丰富多彩. 1.尽量使语句符合查询优化器的规则避免全表扫描而使用索引查询 2.避免频繁创建和删除临时表,以减少系统表资源的消耗. 3.尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理. 4.建立高效的索引

大数据量下高并发同步的讲解(不看,保证你后悔)(转)

  对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了.而并发问题是绝大部分的程序员头疼的问题, 但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们一起来研究一下常见的并发和同步吧. 为了更好的理解并发和同步,我们需要先明白两个重要的概念:同步和异步 1.同步和异步的区别和联系 所谓同步,可以理解为在执行完一个函数或方法之后,一直等待系统返回值或消息,这时程序是出于阻塞的,只有接收到 返回的值或消息后才往下执行其它的命令. 异步,执行完函数或方法后

大数据量下MySQL插入方法的性能比较

文章讲的是大数据量下MySQL插入方法的性能比较,不管是日常业务数据处理中,还是数据库的导入导出,都可能遇到需要处理大量数据的插入.插入的方式和数据库引擎都会对插入速度造成影响,本文旨在从理论和实践上对各种方法进行分析和比较,方便以后应用中插入方法的选择. 插入分析 MySQL中插入一个记录需要的时间由下列因素组成,其中的数字表示大约比例: ·连接:(3) ·发送查询给服务器:(2) ·分析查询:(2) ·插入记录:(1x记录大小) ·插入索引:(1x索引) ·关闭:(1) 如果我们每插入一条都

MySQL 大数据量快速插入方法和语句优化

MySQL大数据量快速插入方法和语句优化是本文我们主要要介绍的内容,接下来我们就来一一介绍,希望能够让您有所收获! 一.INSERT语句的速度 插入一个记录需要的时间由下列因素组成,其中的数字表示大约比例: 连接:(3) 发送查询给服务器:(2) 分析查询:(2) 插入记录:(1x记录大小) 插入索引:(1x索引) 关闭:(1) 这不考虑打开表的初始开销,每个并发运行的查询打开. 表的大小以logN (B树)的速度减慢索引的插入. 加快插入的一些方法 如果同时从同一个客户端插入很多行,使用含多个

大数据量高并发的数据库优化详解_MsSql

如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. 一.数据库结构的设计 在一个系统分析.设计阶段,因为数据量较小,负荷较低.我们往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性能则要花费更多的人力物力,而整个系统也不可避免的形成了一个打补丁工程. 所以在考虑整个系统的流程的时候,我们必须

大数据量高并发的数据库优化详解

如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. 一.数据库结构的设计 在一个系统分析.设计阶段,因为数据量较小,负荷较低.我们往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性能则要花费更多的人力物力,而整个系统也不可避免的形成了一个打补丁工程. 所以在考虑整个系统的流程的时候,我们必须

针对Sqlserver大数据量插入速度慢或丢失数据的解决方法

我的设备上每秒将2000条数据插入数据库,2个设备总共4000条,当在程序里面直接用insert语句插入时,两个设备同时插入大概总共能插入约2800条左右,数据丢失约1200条左右,测试了很多方法,整理出了两种效果比较明显的解决办法: 方法一:使用Sql Server函数: 1.将数据组合成字串,使用函数将数据插入内存表,后将内存表数据复制到要插入的表. 2.组合成的字符换格式:'111|222|333|456,7894,7458|0|1|2014-01-01 12:15:16;1111|222