您的位置:首页 > 数据库 > Oracle

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

2016-06-14 11:38 661 查看


搞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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 循环