批量update数据

今天开发要更新一批数据,等了很久也没更新成功。找到了我,我在网上找了一下资料,发现在用rowid的方式更新最快,参照下面的文章更新成功,记录一下

DAVE文章链接:http://blog.csdn.net/tianlesoftware/article/details/6576156

原来的SQL:

update t_canhe_member_info a set a.id_card = (select b.id_card from BBB_EEE b
                                                     where a.member_no = b.member_no)
                                   where a.join_year = ‘2014‘ ;

批量更新的PL/SQL块:

DECLARE
  CURSOR cur IS
    SELECT
     a.id_card, b.ROWID ROW_ID
      FROM BBB_EEE a, t_canhe_member_info b
     WHERE a.member_no = b.member_no  and b.join_year = ‘2014‘
     ORDER BY b.ROWID;  ---如果表的数据量不是很大,可以不用 order by rowid
  V_COUNTER NUMBER;
  V_JISHU number; --统计更新了多少条 
BEGIN
  V_COUNTER := 0;
  V_JISHU := 0;

  FOR row IN cur LOOP

    UPDATE t_canhe_member_info
       SET id_card = row.id_card
     WHERE ROWID = row.ROW_ID;
    V_COUNTER := V_COUNTER + 1;
    V_JISHU := V_JISHU + 1;
    IF (V_COUNTER >= 1000) THEN
      COMMIT;     --1000条提交一次
      V_COUNTER := 0;
    END IF;
  END LOOP;
  COMMIT;
  DBMS_OUTPUT.PUT_LINE(‘更新了 ‘ || V_JISHU  || ‘条!‘ );
END;

时间: 2024-11-10 13:49:31

批量update数据的相关文章

mysql中批量update数据

创建临时表 UPDATE sys_user, ( SELECT min(id) AS id FROM sys_userWHERE invitation_expert_user_id = '8a2ebe035de8881e015e134139442b93' AND type = 4 AND del_flag = 0 GROUP BY id) AS tmpSET sys_user.invitation_agent_user_id = '014282c8c3de4d80ab2c4f72d384d6c2

Hibernate 批量update数据时,怎么样做可以回滚,

1.serviceManagerDaoImpl代码里对异常不进行try,catch抛出, 2.或者抛出throw new RuntimeException()异常

oracle和mysql中update联表批量更新数据的区别

之前碰到一个sql语句,在oracle中可以运行,在mysql上就不行,后来查了好久,发现了他们两个联表批量更新数据的区别如下: (借鉴一下别人的例子) update :单表的更新不用说了,两者一样,主要说说多表的更新复制代码 代码如下: Oracle> Oracle的多表更新要求比较严格,所以有的时候不是很好写,我们可以试试Oracle的游标 update ( select t.charger_id_ new_charger_id_ from t_cus_year_status t left

Sql语句批量更新数据(多表关联)

最近在项目中遇到一个问题,原来设计的功能是不需要一个特定的字段值depid的,但是新的功能需要根据depid来展现,于是出现了这样一个问题,新增加的数据都有正确的depid,而原来的大量的数据就没有depid或者说depid不是想要的,面临要批量更新原来数据depid的问题. 更新涉及到三个表base_cooperativeGroup,base_groupuser,base_user. 列出表结构: 1.base_cooperativeGroup 2.base_groupuser 3.base_

Hibernate 中批量处理数据

一.批量处理操作 批量处理数据是指在一个事务场景中处理大量数据.在应用程序中难以避免进行批量操作,Hibernate提供了以下方式进行批量处理数据: (1)使用HQL进行批量操作     数据库层面 (2)使用JDBC API进行批量操作  数据库层面 (3)使用Session进行批量操作   会进缓存 1.使用HQL进行批量操作 HQL可以查询数据,也可以批量插入.更新和删除数据.HQL批量操作实际上直接在数据库中完成,处理的数据不需要加载到Session缓存中.使用Query接口的execu

Mybatis批量更新数据

Mybatis批量更新数据 第一种方式 [html] view plain copy print? <update id="updateBatch" parameterType="Map"> update aa   set a=#{fptm}, b=#{csoftrain} where c in <foreach collection="cs" index="index" item="item&qu

hibernate 批量处理数据

批量处理数据是指在一个事务中处理大量数据. 在应用层进行批量操作, 主要有下面方式: 通过 Session 通过 HQL 通过 StatelessSession 通过 JDBC API(仅仅要会用这样的,其它作为了解) 通过 Session 来进行批量操作 Session 的 save() 及 update() 方法都会把处理的对象存放在自己的缓存中. 假设通过一个 Session 对象来处理大量持久化对象, 应该及时从缓存中清空已经处理完成而且不会再訪问的对象. 详细的做法是在处理完一个对象或

JDBC的批量处理数据

主要用到的方法有: preparedStatement.executeBatch();//积攒的数据执行 preparedStatement.clearBatch();//积攒的清除掉 preparedStatement.addBatch();//这儿并不马上执行,积攒到一定数量之后,刷新执行----------------------------------------------------------------------------------------------- Test12

MSSQL批量写入数据方案

近来有一个项目Feature需要有批量写入数据的场景,正巧整理资料发现自己以前也类似实现的项目,在重构的同时把相关资料做了一个简单的梳理,方便大家参考. 循环写入(简单粗暴,毕业设计就这样干的)(不推荐) Bulk Copy写入(>1000K 记录一次性写入推荐) 表值参数方式写入(mssql 2008新特性)(强烈推荐) 在SQL Server 2008未提供表值参数之前,需要将多行数据传递到存储过程或参数化sql命令我们一般会采用以下几个方法: 使用一系列单参数来表示多个数据列和行中的值.但