日期:2014-05-17  浏览次数:21005 次

oracle中如何批量更新某列数据
有以下表......
T1:
列名 A列 B列
数据 数据A 100
数据 数据A 100
数据 数据B 100
数据 数据A 100
数据 数据B 100
数据 数据A 100
数据 数据A 100

*************************************
T2:
列名 A列 B列
数据 OX001 数据A
数据 OX002 数据B
*************************************
问题:
我想批量更新表T1,得出结果如下:
T1:
列名 A列 B列
数据 OX001 100
数据 OX001 100
数据 OX002 100
数据 OX001 100
数据 OX002 100
数据 OX001 100
数据 OX001 100

------------------------------
鄂用以下的语句更新后,提示更新的数据太多。
update T1
set T1.A列=
(select T2.A列 from T2 where T2.B列=T1.A列)
但是,修改成这样后,可以。。
update T1
set T1.A列=
(select T2.A列 from T2 where T2.B列=T1.A列 and rounum<=1)
不过总感觉这样只限定下,会出现大数据的时候,更新遗漏的问题。。。
求高手指点,谢谢。。。

------解决方案--------------------
方法一:
采用存储过程,使用循环,限制更新的条数,效率不是很高。。
方法二:
建立和目标表一样的结构的临时表(基于事务的临时表,保证主键一样),使用视图更新的操作。
update( select a.A列,b.A列 from t1 a,temp_t1 b where a.id=b.id) set a.A列=b.A列
方法三:
同样的使用临时表,根据插入产生的日志少于update的日志的办法,使用
truncate table t1;
create table t1 as select * from temp_t1;
------解决方案--------------------
SQL code

--你指的遗漏不明白是什么意思
--如果数据量大,建议还是采用临时表来更新

update T1 set T1.A列=
(select T2.A列 from T2 where T2.B列=T1.A列 and rounum<=1)
where exists(select 1 from T2 where T2.B列=T1.A列 )  --加上这句,避免勿更新一些资料!