标签:count name 批量 -- 更新 插入 Oracle id
目录1 引言
Oracle
数据库对于大数据量的更新和插入如果一次一行SQL的写的话,显得有点low
同时也是效率问题容易让人抓狂,因此在这里记叙下针对Oracle
的批量更新和插入
建表:
-- 学生表
create table student (id varchar2(20),name varchar2(20),class varchar2(20));
-- 其他表
create table other (id varchar2(20),name varchar2(20));
1.1 批量更新
1.1.1 一般方式
update student s
set s.name =
(select o.name from other o where s.id = o.id )
where exists (select 1 from other o where s.id = o.id ) ;
引申问题:
针对上述的sql
中的where
条件可有可无,如果没了是全表更新,但是更新结果是需要匹配的上才更新,不然不更新,这样不容易看出实际更新了多少行;如果有where
条件,就先去查证符合条件的再去更新,这样可以看出来更新了多少行
1.1.2 使用游标
由于一般的update
更新耗时久,5W
条数据能耗时12分钟
,因此游标方式可以作为考虑
declare
cursor my_cur is --声明游标my_cur
select s.id,o.name from student s,other o where s.id = o.id ;
count NUMBER;--声明一个number类型的变量
BEGIN count:=0;--初始化变量值为0
FOR cur IN my_cur LOOP--遍历游标
UPDATE student s SET s.name=cur.name WHERE s.id=cur.id;
count:=count+1;--每次循环变量值+1
IF(count>=1000) THEN
COMMIT;
count:=0;--每更新1000行,count值为1000时候,就提交给数据库提交后将变量归零,继续下一个1000行更新
END IF;
END LOOP;
COMMIT;
END;
/
1.2 批量插入
一般批量插入方式与一般的插入语句是少了values
关键字就可以使用批量插入了
insert into student
select o.*,'1' from other o
如果插入过多的话,可以使用游标的方式插入,来提高效率
标签:count,name,批量,--,更新,插入,Oracle,id 来源: https://www.cnblogs.com/jingzh/p/14268607.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。