天天看点

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函数,它远比你想象的好用。