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 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)
目前正在研究篮球表现数据库。我遇到的问题是存储比赛的获胜者。 匹配 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 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)