繁体   English   中英

ORACLE TRIGGER更新表,如果另一个更新

[英]ORACLE TRIGGER update table if another one is updated

我想在更新另一个表时更改表中所有行的字段。
我有一个游戏桌,一个裁判桌(带有nation_id)和国家桌。

现在,如果有人更新裁判表中的nation_id,我想自动更新游戏表中的referee_nation_Name。
我的问题是,当有人更新此表中的nation_id时,我不知道如何获取referee_id(这是唯一的)。 如果我选择所有referee_id,例如:new.nation_id我将从这个国家生活的人那里得到其他裁判ID ...这是我的非工作触发器:

CREATE OR REPLACE TRIGGER name
AFTER UPDATE OF nation_id ON referee
FOR EACH ROW
DECLARE
    nationname VARCHAR2(150);
BEGIN
    SELECT n.name INTO nationname
            FROM nation n, referee r, game g
      WHERE n.nation_id = r.nation_id AND g.referee_id = :old.referee_id);
    UPDATE game SET referee_nation_Name = nationname WHERE referee_id = :old.referee_id;
END;

知道你永远不会设计一个存储非规范化数据的数据模型,因为它非常难以保持同步,你的教练可能正在寻找像

CREATE OR REPLACE TRIGGER name
  BEFORE UPDATE OF nation_id ON referee
  FOR EACH ROW
DECLARE
    l_nationname VARCHAR2(150);
BEGIN
    SELECT name
      INTO l_nationname 
      FROM nation
     WHERE nation_id = :new.nation_id;

    UPDATE game
       SET referee_nation_name = l_nationname
     WHERE referee_id = :new.referee_id;
END;

当然,这并没有解决当有人更新nation表以在其他可能的漏洞中更改name时发生的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM