0

我想在更新另一个表时更改表的所有行中的一个字段。
我有一张比赛桌、一张裁判桌(带有国家 ID)和国家桌。

现在,如果有人更新裁判表中的nation_id,我想从比赛表中自动更新裁判国名。
我的问题是当有人更新此表中的国家 ID 时,我不知道如何获取裁判 ID(这是唯一的)。如果我选择所有类似于 :new.nation_id 的裁判 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;
4

1 回答 1

2

知道你永远不会设计一个存储像这样的非规范化数据的数据模型,因为它很难保持同步,你的导师可能正在寻找类似的东西

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其他可能的漏洞时会发生什么。

于 2013-05-02T22:09:31.433 回答