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;

df84e5a696ed55d6b58f09a698f325c0.png

B表结构如下

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

e7e633cb5fe5d0f795400bb45160c68d.png

因为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';

688c0406d084278c7f4d5d40940370b5.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值