Oracle里批量更新列数据的问题

问题描述

各位大侠好,现在遇到一个问题求教Oracle里有两张表,一张人员信息表,里面包含了人员和各项基本信息,其中包括了银行代码和银行卡号两个字段。另一张表是记录的银行代码和所有人的银行卡号。现在人员表里只存了银行卡号,我想把银行代码先根据卡号从银行表里查出来,再写入到人员表里的银行代码字段。使用了游标,发现效率很低,约20W条数据,已经执行一个多小时了,各位高手有没有其他更好的办法问题补充首先感谢楼上的兄弟。我现在用的就是方法一,但是银行表里会有重复的银行卡号,要取重复的卡号中银行代码较大的那个数据,这个问题没法解决啊。

解决方案

语句必须要用到索引才能快起来,否则速度没有本质上的提高。楼主可以写语句看下执行计划。
解决方案二:
不要频繁commit,能用一条sql搞定最好,越简单,速度越快.游标也可以BULK collect下,提高效率
解决方案三:
mjwtx 写道各位大侠好,现在遇到一个问题求教Oracle里有两张表,一张人员信息表,里面包含了人员和各项基本信息,其中包括了银行代码和银行卡号两个字段。另一张表是记录的银行代码和所有人的银行卡号。现在人员表里只存了银行卡号,我想把银行代码先根据卡号从银行表里查出来,再写入到人员表里的银行代码字段。使用了游标,发现效率很低,约20W条数据,已经执行一个多小时了,各位高手有没有其他更好的办法t_person(id varchar2(40) primary key,credit_id varchar2(40),credit_code varchar2(40),other varchar2(200));t_credit (id varchar2(40) primary key, code varchar2(40) not null);declare i_count integer default 0;beginfor t in (select rowid,credit_id from t_person) loopupdate t_person s set s.credit_code = (select code from t_credit t where t.id = s.credit_id) where s.rowid = t.rowid;i_count := i_count +1;--采用1000条提交一次,避免占用大量回退段if mod(i_count,1000) = 0 then i_count :=0;commit;end if;commit;end;
解决方案四:
用incline update方式更新,语法:update (select ... from a, b where a.col=b.col) set ...
解决方案五:
不知道楼主是想讨论oralce还是想解决系统问题,楼主的业务场景是?这两张表怎么维护的?考虑下你的设计??
解决方案六:
应该没有那么的慢吧?我上次2张表,30W数据也就2分钟多钟1个多小时,可能ORACLE为了保证写一致性,有很多重启动SQL,而且时间越长,效率越低要是有DBA的话,还是交给DBA来做这个事情吧,毕竟比较专业。
解决方案七:
update t1 set t1.code=(select max(t2.code) from t2 where t2.no=t1.no group by t2.code);一条语句搞的 且效率也不低no 卡号code 银行代码
解决方案八:
说个笨方法,但是速度应该不慢insert into T3(代码,卡号)select max(银行代码),卡号 from t2 group BY 卡号如果语句比较慢,可以人为的将后边查询语句分成几次。然后用表3来执行更新语句
解决方案:
方法1:update t1 set column=(select * from t2 where t2.id=t1.id );方法2:写jdbc,从t2表取出来,update t1 set column=?.用batch的方法执行,应该很快就能搞定。

时间: 2024-09-15 11:54:10

Oracle里批量更新列数据的问题的相关文章

mysql-求助:ibatis批量更新Mysql数据问题

问题描述 求助:ibatis批量更新Mysql数据问题 场景:根据消息号code和状态位status更新所有满足条件的字段值为"T".怎么批量更新?如果是单个条件的话直接用iterate标签把值放到in('xxx','yyy')循环就行了,where后面跟多个条件的时候mysql怎么处理呢? 解决方案 可以 直接在拼装之后在传入到ibatis的XML文件中 解决方案二: 循环的时候加个or就行了: update TABLE__NAME SET TABLE__COLUMN='T' whe

代码-Vb.net 中怎么提取数据库里的两列数据画图?

问题描述 Vb.net 中怎么提取数据库里的两列数据画图? 求大神援助,本人小菜鸟一个: 将这个表中的第一列和第三列提取出来分别为横坐标和纵坐标,画图.看到别人用MSchart控件,我对这个控件不是很熟,希望大家帮个忙,帮我写个简单代码.谢谢啦,求扩散,求帮忙 解决方案 希望最终能画这样的图 解决方案二: 希望最终能画这样的图

如何用不同的sqlDataAdapter 批量更新同一个数据表

问题描述 问:从一个数据库访问类的静态方法中查询返回一个表,并绑定到dataGridView中,在dataGridView中加.删.改数据后怎么一次性批量更新数据到数据库...不能访问数据库访问类中的初始sqlDataAdapter...我没积分不好意思...还是请求高手的帮助(希望能有实例).... 解决方案 解决方案二:用update()啊

批量更新重复数据

原因:重负注册老乡会会员日志,增加 400积分. 解决:设置该积分0 UPDATE sz_app_credit_log AS a LEFT JOIN (SELECT uid,lid,MIN(lid) FROM sz_app_credit_log WHERE appid=7 and oreason LIKE '%老乡会会%' AND dateline>=UNIX_TIMESTAMP('2011-10-01') AND dateline<UNIX_TIMESTAMP('2011-11-01') G

数据库-navicat for oracle里报表和计划这两个是按钮是什么功能?

问题描述 navicat for oracle里报表和计划这两个是按钮是什么功能? 开发"> 表 查看当前数据库的表 试图 相当于临时表 函数 在Oracle里写的程序 数据泵 导入导出数据 查询 写SQL语句 报表 ? 计划 ? 模型 创建数据库模型,可以形成SQL 解决方案 报表 对数据进行统计 计划 定时的任务

C#批量更新数据到oracle,高手请进!!!

问题描述 代码如下:conn.Open();OracleCommandcmd=newOracleCommand(sql,conn);OracleDataAdapteradp=newOracleDataAdapter(cmd);OracleCommandBuildercb=newOracleCommandBuilder(adp);adp.UpdateBatchSize=200;adp.Update(dt.Copy());我想批量更新10000条数据,如果其中有几条数据有问题,那么如何返回有问题的几

在ASP.NET 2.0中操作数据之六十二:GridView批量更新数据_自学过程

导言: 在前面的教程,我们对数据访问层进行扩展以支持数据库事务.数据库事务确保一系列的操作要么都成功,要么都失败.本文我们将注意力转到创建一个批更新数据界面. 在本文,我们将创建一个GridView控件,里面的每一行记录都可以进行编辑(见图1),因此我们没有必要多添加一列来包含Edit, Update,和Cancel按钮,而是在页面包含2个"Update Products"按钮,被点击时,遍历所有的产品并对数据库进行更新.让我们开始吧. 图1:GridView控件里的每一行记录都可以编

ORACLE中如何批量更新关联表

在SQL SERVER中,关联表的批量更新,可以参看这里: http://www.cnblogs.com/downmoon/archive/2007/12/29/1019832.html Oracle下没找到好的语法,临时用这个: update employee set hrdeptname= (select d.DEPTNAME from DEPARTMENT d where ROWNUM=1 and d.deptID=employee.hrdeptID ) 对应的SQL Server语法:

【oracle】更新大批量数据变更步骤

    生产环境中遇到更新或者删除大批量数据的时候,不能直接进行操作,要批量进行. 1 获取要进行更新的数据的主键,保存为文本文件或者csv文件.这一步一定要正确,否则下面的操作会造成更新错误的数据,造成数据不一致! 2 创建临时表并将获取的数据主键导入到创建! #!/bin/sh  # Created by yangql on 2011-11-23 # Parameters  ## . /home/oracle/.profile ORA_USER=yang ORA_PASSWD=yang TO