我在 Oracle SQL 上做一个大学项目,当我尝试更新表时,我不断收到错误“表 (...) 正在变异,触发器/函数可能看不到它”。我的partiteTeams表有 3 列(eventName varchar(), teamId number, teamPlace number)。
这里的目标是,当我在活动中更新给定团队的 teamPlace 时,该位置必须小于或等于同一活动中参与团队的数量。
我的触发器如下:
Before update on participateTeams
for each row
Declare participants number;
Begin
select count(*) into participants from participateteams where :New.eventName = participateteams.eventName;
if(:NEW.teamplace>participants) then
RAISE_APPLICATION_ERROR(-20250,'O lugar da equipa é inválido');
end if;
End;
/
根据我的研究,这是因为我正在尝试读取调用触发器的同一张表。我也尝试将代码的选择部分导出到函数中,但问题仍然存在。
活动的参与者是团队本身,而不是组成这些团队的个人。示例:如果 A 队、B 队和 C 队参加了一项赛事 E,则同一赛事 E 的计数应为 3。
有小费吗?谢谢你。