ORACLE中INSERTING数据时根据条件设置列

Setting a column based on conditions when INSERTING data in ORACLE

目前正在研究篮球表现数据库。我遇到的问题是存储比赛的获胜者。 匹配 table 目前是这样的:

CREATE TABLE Matches(
M_ID int CONSTRAINT pk_Match PRIMARY KEY,
M_Date Date NOT NULL,
M_Location varchar(20),
M_HomeTeam int NOT NULL,
M_AwayTeam int NOT NULL,
M_HomeScore int NOT NULL,
M_AwayScore int NOT NULL,
M_Winner int,
CONSTRAINT fk_TeamHome foreign key (M_HomeTeam) REFERENCES Team(T_ID),
CONSTRAINT   fk_TeamAway foreign key (M_AwayTeam) REFERENCES Team(T_ID)
)

我想要的是 M_Winner 的值根据他们的分数设置为 M_HomeTeam & M_AwayTeam 外键。 我已经能够使用此更新语句执行此操作

UPDATE Matches
SET M_Winner = CASE
WHEN M_HomeScore > M_AwayScore
THEN M_HomeTeam
WHEN M_AwayScore > M_HomeScore
THEN M_AwayTeam
END;

但是我需要它在插入数据时工作。 有什么想法吗?

您可以为此定义触发器:

CREATE OR REPLACE TRIGGER trg_ins_match
BEFORE INSERT ON Matches
   FOR EACH ROW
BEGIN
   IF :new.M_HomeScore > :new.M_AwayScore THEN
       :new.M_Winner = :new.M_HomeTeam
   ELSE
       :new.M_Winner = :new.M_AwayTeam
   END IF;
END;

阅读 Oracle Developer's Guide

中的触发器

在 Oracle 11g+ 中,您可以使用虚拟计算列:

ALTER TABLE matches
    ADD m_winner as (CASE WHEN M_HomeScore > M_AwayScore
                          THEN M_HomeTeam
                          WHEN M_AwayScore > M_HomeScore
                          THEN M_AwayTeam
                     END)