我的 sql 数据库有一些问题需要解决:
- 确保一名球员只能有 2 张黄牌或 1 张红牌
- 一支球队不能有超过5名外国球员(国籍与法国不同的球员)
我的模型是这样的:
Team
-------
team_id (PK)
name
Player
-------
player_id (PK)
team_id (FK)
name
number_yellow_cards
number_red_cards
nationality
我认为触发器可以解决我的问题。这是我的触发器,但在任何情况下都不起作用(插入/更新)
create or replace TRIGGER foreign_players
Before Insert OR UPDATE on Player
FOR EACH ROW
DECLARE nr_foreign_players INTEGER;
Begin
IF INSERTING THEN
SELECT Count(*) INTO nr_foreign_players
FROM
Team T
INNER JOIN Player P ON P.team_id = T.team_id
WHERE
P.team_id = :new.team_id
AND P.nationality <> 'French';
if(nr_foreign_players > 5) then
Raise_Application_Error(-20000,'Error insert' );
End If;
END IF; --INSERTING
IF UPDATING THEN
SELECT Count(*) INTO nr_foreign_players
FROM
Team T
INNER JOIN Player P ON P.team_id = T.team_id
WHERE
P.team_id = :new.team_id
AND P.nationality <> 'French';
if(nr_foreign_players > 5) then
Raise_Application_Error(-20000,'Error update' );
End If;
END IF; --UPDATING
End;
任何人都可以帮助我吗?