Oracle用Loop循环实现大量CRUD操作



搞Java的一般要懂以下三个方面:前端,后台,数据库。这几个方面当然是越精通越好。而在数据库方面,用到最多不外乎增删改查操作(简称CRUD),而这些又给很多框架封装起来了,当我们需要进行复杂的语句进行操作又不想用Java进行拼接时,我们就可以利用数据库中自带的SQL语言,因为这种效率比较高。下面我给大家分享一个在Oracle中实现大量CRUD操作的例子,主要用到的是Loop循环。(背景:实习期间,主管给了一个任务,要求往电能表中插入3500万条模拟记录,大概占用7个G的硬盘空间)

参考代码实现:

DECLARE --定义变量
t date;
d varchar(20);
endt date;

x number:=0;
cursor cdevice is --定义游标
       select t1.* from SYS_DEVICE t1 where t1.device_module_id in(
       select t.device_module_id from SYS_DEVICE_MODULE t where t.device_module_code in('14093','14032','14024','14047')
       );
devicerow cdevice%rowtype;--定义游标变量
BEGIN
  --DBMS_OUTPUT.ENABLE(buffer_size => null);  --表示输出buffer不受限制
  open cdevice;--打开游标

  loop
    fetch cdevice into devicerow;--取游标中的记录
    exit when cdevice%notfound;--退出时的条件语句

    t:=to_date('2016-01-01','yyyy-mm-dd');
    endt:=to_date('2017-12-31','yyyy-mm-dd');

    LOOP
      EXIT WHEN t>endt;
      d:=to_char(t,'yyyy-mm-dd');
      x:=x+1;
      --执行插入语句
      insert into ammeter_staticsdata_day
      (statics_data_id, node_id,statics_day, device_id, device_name, value,channel_name,signal_name) values
      (sys_guid(),devicerow.node_id,d,devicerow.device_id,devicerow.device_name,abs(mod(dbms_random.random,1000)),'电度数','test');
      t:=t+1;
    END LOOP;
      commit;--提交事务
  end loop;
  DBMS_OUTPUT.PUT_LINE(cdevice%rowcount);
  DBMS_OUTPUT.PUT_LINE('已经插入数据记录:'||x||'条');
  close cdevice;--关闭游标
  commit;
END;



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值