oracle两个表之间数据更新怎么实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle两个表之间数据更新怎么实现相关的知识,希望对你有一定的参考价值。

使用ORACLE 11G,现在手里有三张表,A\B表分别为新旧数据表,A表100万条,B表120万条,其中A表和B表有80万条左右的数据UID的值相同。C表为状态表。
A表有uid,name,cost,X四列,B表有uid,name,cost,Y四列。C表有UID,STATUS两列。三张表UID为主键,现在想做以下几件事:
1、对于A\B表相同UID的按照A表uid,name,cost更新B表uid,name,cost,同时将C表相同UID的STATUS设置为U;
2、对于仅在A表UID存在的行,插入B表,同时将C表相同UID的STATUS设置为I;
SQL如何写?

数据类型都一样的么,可以考虑用触发器实现 以oracle数据库为例 有两张表test和test01 字段有id name age sal
create or replace trigger TRIG_UPDATE_TEST
after insert or delete or update on test
for each row
declare
l_id varchar2(50);
l_name varchar2(50);
l_age number;
l_sal number;

begin
if(deleting or updating) then
delete test01
where id=:old.id;
if(deleting) then
return;
end if;
end if;

l_id:=:new.id;
l_name:=:new.name;
l_age:=:new.age;
l_sal:=:new.sal;
begin
insert into test01(id,name,age,sal) values(l_id,l_name,l_age,l_sal);
end;
end TRIG_UPDATE_TEST;
再简化点就是在触发器中不声明变量,直接用:new.字段代替
哎,没分啊
请采纳。追问

可能是我没说太清楚,我不是要实时更新表,是一次性的做表的更新和插入。UID、name、cost三列数据类型,长度定义都相同。怎么写SQL

参考技术A MERGE INTO本回答被提问者采纳 参考技术B ……数据库都上了

oracle怎么同时更新两个表

参考技术A 按顺序更新,然后再commit 就可以了。 参考技术B 两个表关联起来,就可以更新,如:
UPDATE product p, productPrice pp
SET pp.price = pp.price * 0.8
WHERE
p.productId = pp.productId
AND p.dateCreated < '2004-01-01'

海枫科技本回答被提问者采纳

以上是关于oracle两个表之间数据更新怎么实现的主要内容,如果未能解决你的问题,请参考以下文章

oracle 如何实现对单个表批量更新

Oracle SQL 更新基于两个表之间的子查询

oracle历史数据迁移

oracle怎么同时更新两个表

Oracle数据库,关于关联两张表更新问题

update 两个表关联 更新