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;
B表結構如下
select a.*,rownum from G_SN_IMEI_MANAGE a where a.WORK_ORDER='WORK015903' and rownum<=9000;
因為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';
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函數,它遠比你想象的好用。