Sql 在oracle中创建使用其他表中数据的触发器

Sql 在oracle中创建使用其他表中数据的触发器,sql,oracle,plsql,triggers,Sql,Oracle,Plsql,Triggers,我试图在一个名为race的表中创建一个触发器,该表强制执行一个约束,即“STARTDATE。您的触发器中有很多错误 您不必声明STARTDATE变量,应该使用:new.STARTDATE (:new.RACEID)错误时的表达式 您必须先声明变量,然后再选择该变量 您的触发器不应插入比赛。如果开始日期不正确,您可能会引发错误 触发器可能如下所示: CREATE OR REPLACE TRIGGER race_date_trg BEFORE INSERT OR UPDATE ON RA

我试图在一个名为race的表中创建一个触发器,该表强制执行一个约束,即“STARTDATE。您的触发器中有很多错误

  • 您不必声明STARTDATE变量,应该使用:new.STARTDATE
  • (:new.RACEID)错误时的表达式
  • 您必须先声明变量,然后再选择该变量
  • 您的触发器不应插入比赛。如果开始日期不正确,您可能会引发错误
  • 触发器可能如下所示:

    CREATE OR REPLACE TRIGGER race_date_trg    
    BEFORE INSERT OR UPDATE
      ON RACE
      FOR EACH ROW
      DECLARE
        MEETING_ENDDATE DATE;
      BEGIN
        SELECT ENDDATE INTO MEETING_ENDDATE FROM meeting;
        IF :NEW.STARTDATE > MEETING_ENDDATE THEN
          RAISE_APPLICATION_ERROR(-20000, 'Wrong start date!');
        END IF:
      end race_date_trg;
    

    您的代码中有几个语法错误。可能会有所帮助。
    CREATE OR REPLACE TRIGGER race_date_trg    
    BEFORE INSERT OR UPDATE
      ON RACE
      FOR EACH ROW
      DECLARE
        MEETING_ENDDATE DATE;
      BEGIN
        SELECT ENDDATE INTO MEETING_ENDDATE FROM meeting;
        IF :NEW.STARTDATE > MEETING_ENDDATE THEN
          RAISE_APPLICATION_ERROR(-20000, 'Wrong start date!');
        END IF:
      end race_date_trg;