在Oracle中创建一个触发器,它从另一个表使用数据(creating a trigger in o

2019-10-19 09:38发布

我想创建一个表称为比赛的触发器在施行约束,这是“STARTDATE <= MEETING.ENDDATE”

换句话说,从比赛表起始日期必须小于或等于向会议表的结束日期 (起始日期不能运行在此日期之后!)

我想触发记录添加到了比赛表时,进入开始日期是错误的(开始日期是会议桌的结束日期之后)火

我创造了这个迄今为止,但我不知道我是对还是我如何完成它!

CREATE OR REPLACE TRIGGER race_date_trg    
BEFORE INSERT OR UPDATE
  ON RACE
  FOR EACH ROW
  WHEN (NEW.RACEID)
   DECLARE STARTDATE DATE;
  BEGIN
    SELECT * FROM meeting INTO VARIABLE
    IF STARTDATE <= ENDDATE THEN
      INSERT INTO RACE (STARTDATE) VALUES (:n.startdate);
    else
  end (race_date_trg);

谢谢您的帮助!

Answer 1:

您的触发了很多错误。

  1. 你不必申报STARTDATE变量,你应该使用:new.STARTDATE
  2. 时的表情(:new.RACEID)是错误的
  3. 选择它之前,必须声明变量。
  4. 您的触发器不应该插入赛。 如果开始日期不正确,你可以抛出一个错误。

触发看起来是这样的:

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;


文章来源: creating a trigger in oracle that uses data from another table