oracle如何更新大批量的数
1、创建目标对象T_test,并插入10万条数据
以SCOTT用户登录系统并创建目标表T_test
[oracle@rac1 ~]$ sqlplus scott/
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Sep 25 10:32:14 2015
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Enter password:
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options
SQL> create table T_test(id int,name varchar2(20),telphone varchar2(20));
Table created.
SQL>
T_test已成功创建。

2、通过PL/SQL往T_test插入10万条随机数据(ID从1到100000,name为随机大小字符串,telphone为随机8为数字)
SQL> set serveroutput on;
SQL> set timing on;
SQL> declare
2 begin
3 for i in 1..100000 loop
4 insert into T_test(id,name,telphone) values(i,(select dbms_random.string('U', 5) from dual),(select floor(dbms_random.value(10000000,99999999)) from dual));
5 commit;
6 end loop;
7 dbms_output.put_line('ok!');
8 end;
9 /
ok!
PL/SQL procedure successfully completed.
Elapsed: 00:00:50.34
SQL>
SQL> select count(*) from T_test;
COUNT(*)
----------
100000
Elapsed: 00:00:00.11
SQL>
10万随机数据已成功插入。

3、查询T_test的数据作为参考

4、新建一个符合要求的临时表T_temp,并插入要更新的数据
创建临时表T_temp,必须有唯一列,再者就是更新列
说明:这里假设需要对符合要求的数据中的telphone字段进行更新
SQL> create table T_temp(id int, telphone varchar2(20));
Table created.
Elapsed: 00:00:00.05
SQL>

5、通过PLSQL Developer工具插入要更新的数据
先执行select * from T_temp for update;
这时候会看到查询出来的结果那里有个锁,点击打开(如下图)

6、再点击左边那个星号*(如下图)

7、将要更新的数据在excel表格里面按T_temp表的格式处理,第一列留空(如下图)
说明:这里假设要更新ID为1到1000的人的telphone为88888888

8、选中除列名以外的区域,复制(如下图)

9、回到PLSQL Developer,点击黑色小三角形,进行全选(如下图)

10、将刚刚复制的数据进行粘贴(如下图)

11、点击绿色的√:记入改变(如下图)

12、进行commit后查询T_temp表,数据已成功插入(如下图)

13、说明:也可以用pl/sql工具里面的文本导入器(在这先不介绍)。
通过关联临时表对目标表进行update更新
关键性的update语句
UPDATE T_test t1
SET t1.telphone =
(SELECT t2.telphone
FROM T_temp t2
WHERE t2.id = t1.id)
WHERE EXISTS
(SELECT 1
FROM T_temp t3
WHERE t3.id = t1.id);

14、然后再次查询表T_test

15、全部数据已按要求更新完毕!
最后不要忘了将临时表T_temp删除,以免造成资源浪费
