检查oracle sql中两个独立表中的年龄触发器

检查oracle sql中两个独立表中的年龄触发器,sql,oracle,plsql,triggers,Sql,Oracle,Plsql,Triggers,我需要创建一个触发器,检查参与者的年龄(以年为单位)是否高于他/她参加的比赛的最低年龄。为此,我需要从参与者表和竞赛表中获取信息。我需要将此触发器添加到结果表中 这是我的桌子: CREATE TABLE race ( RaceID int, Location varchar2 (60), StartDate Date, RaceTime Date, MinAge int, ); CREATE TABLE participant ( ParticipantID int, "Name

我需要创建一个触发器,检查参与者的年龄(以年为单位)是否高于他/她参加的比赛的最低年龄。为此,我需要从参与者表和竞赛表中获取信息。我需要将此触发器添加到结果表中 这是我的桌子:

CREATE TABLE race 
( 
RaceID int, 
Location varchar2 (60), 
StartDate Date, 
RaceTime Date, 
MinAge int, 
);

CREATE TABLE participant
(
ParticipantID int,
"Name" varchar2 (60),
DateOfBirth date,
Sex varchar2 (1),
Age int
);

CREATE TABLE results
(
RaceID int not null unique,
ParticipantID int not null unique,
position number (2)
);
以下是我迄今为止创造的:

 create or replace TRIGGER dob_trg
  BEFORE INSERT OR UPDATE ON RESULTS
  FOR EACH ROW
DECLARE
RACE_MINAGE NUMBER;
PARTICIPANT_AGE NUMBER;
BEGIN
  SELECT RACE.MINAGE, PARTICIPANT.AGE
    INTO RACE_MINAGE, PARTICIPANT_AGE
    FROM RACE PARTICIPANT
   WHERE RACE.RACEID = :NEW.RACEID; 
  IF : NEW.AGE < : NEW.MINAGE THEN
    RAISE_APPLICATION_ERROR(-20000, 'Participant too young!');
  END IF;
enddob_trg;
创建或替换触发器dob\u trg
在插入或更新结果之前
每行
声明
种族号码;
参与者的年龄编号;
开始
选择RACE.MINAGE、PARTICIPANT.AGE
进入种族年龄、参与者年龄
来自参赛者
其中RACE.RACEID=:NEW.RACEID;
如果:NEW.AGE<:NEW.MINAGE则
提出申请错误(-20000,‘参与者太年轻!);
如果结束;
enddob_trg;
然而,我得到了以下错误 错误(9,6):PLS-00103:遇到符号“:”

非常感谢您的帮助

IF : NEW.AGE < : NEW.MINAGE THEN

但这还不能使代码正常工作,因为您在IF语句中测试了错误的字段。此外,您没有筛选参与者ID。

错误:

表格竞赛-米纳格列末尾有一个额外的逗号

CREATE TABLE race 
( 
RaceID int, 
Location varchar2 (60), 
StartDate Date, 
RaceTime Date, 
MinAge int, 
);
内部触发错误:

如果:NEW.AGE<:NEW.MINAGE,则应

IF :NEW.AGE < :NEW.MINAGE THEN

在表之间添加逗号

固定触发器 -我想你的扳机应该是这样的
编译并尝试一下
参见我的逻辑:
此查询将使用谓词“NEW.ParticipantID”存储minage的值

这部分:-如果种族歧视更大或相等,则

IF :NEW.AGE <= RACE_MINAGE THEN
        RAISE_APPLICATION_ERROR(-20000, 'Participant too young!');
      END IF;

IF:NEW.AGE非常感谢@Up_One触发器编译,但还有另一个问题,有许多参赛者参加了许多比赛(每个比赛都有自己的最小年龄),因此如果我想将下面的行添加到我的参赛者表中(如修改后的触发器中建议的那样)Oracle显示以下错误消息:SQL错误:ORA-01403:未找到数据ORA-06512:位于“SYSTEM.HORSE_DOB_TRG”第4行ORA-04088:执行触发器“SYSTEM.HORSE_DOB_TRG”01403时出错。00000-“未找到数据”插入参与者(参与者ID、“姓名”、出生日期、性别、年龄)值('4'、'bob'、'10/Sep/02'、'M'、'4');用此评论更新您的问题!我不明白你要我做什么!你想让我编辑我最初发布的问题吗?
IF :NEW.AGE < :NEW.MINAGE THEN
FROM RACE PARTICIPANT
  SELECT RACE.MINAGE, PARTICIPANT.AGE
            INTO RACE_MINAGE, PARTICIPANT_AGE
            FROM RACE, PARTICIPANT
           WHERE RACE.RACEID = :NEW.ParticipantID;
IF :NEW.AGE <= RACE_MINAGE THEN
        RAISE_APPLICATION_ERROR(-20000, 'Participant too young!');
      END IF;
  CREATE OR REPLACE TRIGGER dob_trg
  BEFORE INSERT OR UPDATE ON participant
  FOR EACH ROW
DECLARE
RACE_MINAGE NUMBER;
PARTICIPANT_AGE NUMBER;
BEGIN
  SELECT RACE.MINAGE, PARTICIPANT.AGE
    INTO RACE_MINAGE, PARTICIPANT_AGE
    FROM RACE, PARTICIPANT
   WHERE RACE.RACEID = :NEW.ParticipantID;
   exception
  when NO_DATA_FOUND then
   NULL; -- or do something else you choose
  IF :NEW.AGE <= RACE_MINAGE THEN
    RAISE_APPLICATION_ERROR(-20000, 'Participant too young!');
  END IF;
  end;