在oracle中创建一个使用另一个表中的数据的触发器

时间:2014-02-25 12:03:02

标签: sql oracle plsql triggers

我试图在一个名为race的表中创建一个触发器,该表强制执行一个约束,即“STARTDATE< = MEETING.ENDDATE”

换句话说,竞赛表中的 startdate 必须小于或等于会议桌的 enddate (此日期后不能开始运行!)

我希望在将记录添加到竞赛表时触发触发器并且输入的startdate是错误的(startdate是在会议桌的结束日期之后)

到目前为止我创造了这个,但我不知道我是对的还是我如何完成它!

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);

谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

你的触发器有很多错误。

  1. 您不必声明STARTDATE变量,您应该使用:new.STARTDATE
  2. 表达WHEN(:new.RACEID)错误
  3. 在选择之前,您必须声明VARIABLE。
  4. 您的触发器不应插入Race。如果开始日期不正确,您可能会引发错误。
  5. 触发器可能如下所示:

    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;