Oracle批量Update記錄

2021-07-24 03:16:22 字數 1393 閱讀 3356

工作中經常用到oracle批量更新記錄,做為老手也怕出錯,總之要小心再小心,確保資料批量更新正確。

下面舉乙個例子:

1、建立兩張結構類似的表,建表語句如下:

create table jayt1(

id int,

code varchar2(8)

);create table jayt2(

id int,

code varchar2(8)

);

2、初始化資料,語句如下:

insert into jayt1 values(1,'1');

insert into jayt1 values(2,'b');

insert into jayt1 values(3,'3');

insert into jayt1 values(4,'4');

insert into jayt2 values(1,'a');

insert into jayt2 values(2,'b');

insert into jayt2 values(3,'c');

commit;

3、需求是這樣的,通過jayt2表來更新jayt1表的code欄位

a、錯誤的寫法:

update jayt1 t1 set (id,code)=( select id,code from jayt2 t2 where t1.id=t2.id);
這種寫法,會更新t1表中的所有行:如果t1.id=t2.id,就更新t2中查出的記錄進t1;如果t1.id<>t2.id,t1中的記錄會被更新成空(null)。

更新結果如下,顯示不是我們需要的。

b、正確的寫法:

update jayt1 t1 

set (id,code)=( select id,code from jayt2 t2 where t1.id=t2.id)

where exists(select 1 from jayt2 t2 where t1.id=t2.id and t1.code <> t2.code);

正確的寫法,就是在後面加了一句

where exists(select 1 from jayt2 t2 where t1.id=t2.id and t1.code <> t2.code);  

這句話的意思是:如果存在t1.id=t2.id且t1.code <> t2.code,就更新,否則,不更新,所以不會導致t1表中所有的記錄都被更新。

總結:update時,要弄清限定條件,要測試!

批量插入,update

setting 1 create table t as select from all objects where 1 2 模擬逐行提交的情況,注意觀察執行時間 declare begin for cur in select from t ref loop insert into t values ...

批量UPDATE的操作

有乙個簡單的業務需求,要根據另外乙個表的id去更新這張表的sys為scott 要更新 w記錄。sql create index t idx1 on t merge1 object id index created.sql create index idx t on t merge2 object i...

mysql批量update資料優化

有一張表goods中有20w條資料,現在需要把某個欄位的值做md5加密後更新。一條一條迴圈更新效能差不說,還容易造成資料庫阻塞。set time limit 0 ini set memory limit 1g mysqli new mysqli 127.0.0.1 root root wx 3306...