我希望在更新另一个表时更改表中所有行的字段
我有一个游戏桌,一个裁判表(带有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;
答案 0 :(得分: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
以及其他可能的漏洞时会发生什么。