oracle数据库批量更新update操作

swing wang 2017-08-21 12:56:32
这几天遇到一个需要批量更新操作的需求,让我也很头疼。有哪位大神给帮帮忙,具体是这样的:

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,而且效率方面也不知道怎样,因为是批量所以必须考虑效率问题
...全文
7406 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxq129601 2017-08-22
  • 打赏
  • 举报
回复
参数值用一个绑定变量去传,应该会快些
shpery 2017-08-21
  • 打赏
  • 举报
回复
一、使用union all 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;
风中的千纸鹤 2017-08-21
  • 打赏
  • 举报
回复
declare 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模块,判定如果出现错误怎么处理
江南小鱼 2017-08-21
  • 打赏
  • 举报
回复
引用 2 楼 Java_zero 的回复:
[quote=引用 1 楼 lovelj2012 的回复:] 是不是可以用存储过程,传值Name,ID|Name,ID,存储过程for循环,记录修改成功条数
存储过程是怎么实现的啊,大概给个代码片段,还有怎么返回影响行数,麻烦稍微具体点[/quote] 1、度娘找个Oracle实现的split函数(oracle木有自带的split函数,是通过自定义函数实现的) 2、for循环遍历split函数,然后再通过都号截取,分别把每一行的Name和ID读取到 3、执行update操作,通过exception或者sql%rowcount判断是否执行成功
swing wang 2017-08-21
  • 打赏
  • 举报
回复
引用 1 楼 lovelj2012 的回复:
是不是可以用存储过程,传值Name,ID|Name,ID,存储过程for循环,记录修改成功条数
存储过程是怎么实现的啊,大概给个代码片段,还有怎么返回影响行数,麻烦稍微具体点
江南小鱼 2017-08-21
  • 打赏
  • 举报
回复
是不是可以用存储过程,传值Name,ID|Name,ID,存储过程for循环,记录修改成功条数

3,494

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧