这几天遇到一个需要批量更新操作的需求,让我也很头疼。有哪位大神给帮帮忙,具体是这样的:update user u set u.username='小花' where u.id='1';
update user u set u.username='小明' where u.id='2';
update user u set u.username='小李' where u.id='3';
update user u set u.username='小王' where u.id='4;
......类似这样的操作。
目前我的解决方案是这样的begin
update user u set u.username='小花' where u.id='1';
update user u set u.username='小明' where u.id='2';
update user u set u.username='小李' where u.id='3';
update user u set u.username='小王' where u.id='4;
......;
end;但是这样有很多的问题,效率方面不知道怎样先不说,但是不返回所影响的行数。不知道有没有更好的sql语句。是oracle数据库。
如果对ibatis很熟悉的大神最好帮帮忙,想想ibatis里面应该怎么写。我现在是这样的:<update id="batchUpdate" parameterClass="list">
begin
<iterate conjunction="">
update user u set u.username=#[].username# where u.id=#[].id#;
</iterate>
end;
</update>这样确实可以批量修改,但是返回值永远是-1,而且效率方面也不知道怎样,因为是批量所以必须考虑效率问题
update user u set u.username='小明' where u.id='2';
update user u set u.username='小李' where u.id='3';
update user u set u.username='小王' where u.id='4;
......类似这样的操作。
目前我的解决方案是这样的begin
update user u set u.username='小花' where u.id='1';
update user u set u.username='小明' where u.id='2';
update user u set u.username='小李' where u.id='3';
update user u set u.username='小王' where u.id='4;
......;
end;但是这样有很多的问题,效率方面不知道怎样先不说,但是不返回所影响的行数。不知道有没有更好的sql语句。是oracle数据库。
如果对ibatis很熟悉的大神最好帮帮忙,想想ibatis里面应该怎么写。我现在是这样的:<update id="batchUpdate" parameterClass="list">
begin
<iterate conjunction="">
update user u set u.username=#[].username# where u.id=#[].id#;
</iterate>
end;
</update>这样确实可以批量修改,但是返回值永远是-1,而且效率方面也不知道怎样,因为是批量所以必须考虑效率问题
存储过程是怎么实现的啊,大概给个代码片段,还有怎么返回影响行数,麻烦稍微具体点
1、度娘找个Oracle实现的split函数(oracle木有自带的split函数,是通过自定义函数实现的)
2、for循环遍历split函数,然后再通过都号截取,分别把每一行的Name和ID读取到
3、执行update操作,通过exception或者sql%rowcount判断是否执行成功
i number;
j number;
begin
i := 1;
j := 0;
select count(*) into j from T1;
loop
exit when i > j;
update T1 set T1.Subobject_Name = (select T2.Subobject_Name from T2 where T1.ID = T2.ID)
where T1.ID >= i and T1.ID <= (i + 1000);
i := i + 1000;
commit;
end loop;
end;不知道你的原始数据怎么来的,这样写的话,原始数据需要先保存到一张表中,如果需要确保数据完全正确的插入到表中,你需要加上exception模块,判定如果出现错误怎么处理
insert into test(a,b)
select 'a1','b1' from dual
union all
select 'a2','b2' from dual
;二、使用insert all into插入多条数据
insert all into test(a,b) values('a1','b1')
into test(a,b) values('b1','b2')
select 1 from dual;