暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 如何跨2个表同步列值

ASKTOM 2019-08-12
104

问题描述

嗨,汤姆,

我有2个表A和B。列 “id” 在两个表中很常见。

创建表A (id号主键,类型为varchar2(20),desc1 varchar2(20));

创建表B (id号主键,类型为varchar2(20));

这两个表中的列 “类型” 可以具有 (1,2,3) 中的值。

最初,当使用所有3列值填充表A时,仅将表A中的id插入到表B (类型列值不会在B中更新)。

现在,当表A的类型列中有更新时,我们希望将更新的值插入到表B类型列中。同样,如果表B的类型列中有更新,则应在表A中更新该值以获取相应的id。
基本上,我们希望id在两个表中类型列相同。

您能否让我知道实现此目标的方法。

谢谢,
子哈希

专家解答

如果表应该具有相同的值...为什么不只有一张表?

您可以使用合并做更新-如果-存在,插入-如果-不存在逻辑。所以每次插入或更新后,你可以合并到B:

create table A (
  id number primary key, type varchar2(20), desc1 varchar2(20)
);

create table B (
  id number primary key, type varchar2(20)
);

insert into a values ( 1, 1, 'a' );

merge into b
using a
on    ( a.id = b.id )
when matched then
  update set b.type = a.type
when not matched then
  insert values ( a.id, a.type );
  
select * from b;

ID    TYPE   
    1 1  

update a
set    type = 2;

merge into b
using a
on    ( a.id = b.id )
when matched then
  update set b.type = a.type
when not matched then
  insert values ( a.id, a.type );

select * from b;

ID    TYPE   
    1 2   
复制


然后,您可以进行反向操作以将B上的更改传输回A。

但是!

这为您打开了各种并发问题。

如果在会话1中运行:

update a
set    type = 1;
复制


在第二节中:

update b 
set   type = 3;
复制


然后在每个之后运行适当的合并,您将陷入僵局!

因此,您需要仔细考虑当两个人同时编写冲突的更改时该怎么办。

为什么又需要两张表?
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论