天天看點

oracle中更新字段涉及另一張表内容,oracle把不同表結構和字段的資料更新到另外一個表,之後再插入到新表...

Oracle不同表的更新和插入操作

在生産的時候,因為配置問題導緻一張表A的某個字段沒有資料,結果導緻B表的資料完全為null。

現需求如下:借助g_wo_sn C 的資料serial_number,之後把這些資料更新到G_SN_IMEI_MANAGE A表的SN列,兩張表的表結構不一緻,之後再插入到C表

即:把C的serial_number更新到A表的SN

C表結構如下

select a.*,rownum from g_wo_sn a where A.WORK_ORDER='WORK015903' and rownum<=9000;

oracle中更新字段涉及另一張表内容,oracle把不同表結構和字段的資料更新到另外一個表,之後再插入到新表...

B表結構如下

select a.*,rownum from G_SN_IMEI_MANAGE a where a.WORK_ORDER='WORK015903' and rownum<=9000;

oracle中更新字段涉及另一張表内容,oracle把不同表結構和字段的資料更新到另外一個表,之後再插入到新表...

因為C表和A表的表結構不相同,也沒有相同的行資料。但是仔細觀察A表的字段,我們發現A表的NOT_BURN_IMEI這列是沒有資料的,name既可以用Oracle的内置函數rownum更新資料。步驟如下:

1.首先更新A表的NOT_BURN_IMEI字段,讓其為數字排列。即NOT_BURN_IMEI=rownum。這是最重要的一步

update G_SN_IMEI_MANAGE set NOT_BURN_IMEI=rownum where WORK_ORDER='WORK015903';

2.之後把C表的serial_number更新到A表的SN中

update G_SN_IMEI_MANAGE a set a.sn=(select t.serial_number from (select a.*,rownum as g from g_wo_sn a where A.WORK_ORDER='WORK015903' and rownum<=9000)t where t.g=a.NOT_BURN_IMEI) where a.work_order='WORK015903';

oracle中更新字段涉及另一張表内容,oracle把不同表結構和字段的資料更新到另外一個表,之後再插入到新表...

3.最後更新A表的NOT_BURN_IMEI字段

update G_SN_IMEI_MANAGE set NOT_BURN_IMEI=null where WORK_ORDER='WORK015903';

4.之後插入到B表中

insert into IMEI_SN_K1807 b (WORK_ORDER,PART_ID,SN,IMEI,UPDATE_USERID,UPDATE_TIME,FLAG)

(select WORK_ORDER,PART_ID,SN,IMEI,OPERATOR_ID,OPERATOR_TIME,FLG from G_SN_IMEI_MANAGE a where a.WORK_ORDER='WORK015903') ;

當然,我們也可以借助Excle檔案導入。但是在涉及到兩個表不同的資料量的時候,可以試一試一下rownum函數,它遠比你想象的好用。