【发布时间】:2013-03-26 17:09:22
【问题描述】:
如果我提出的问题已经在其他地方得到解答,但我很难找到合适的答案,请提前致歉。我知道如何基于一个表创建简单的触发器,但是我试图实现跨两个表的链接更新。场景如下: course 表中有一个 duration 列,而 products 表中有一个 start_date 列。课程是提供课程并且两个表(课程和课程)通过 course_id 链接的实例。如果对应的课程持续时间为 5 天,我需要创建一个触发器,以防止产品表在 1 月期间具有开始日期。我已尝试创建此触发器并可以发布我的努力,但我敢肯定,我绝对远离。
CREATE OR REPLACE TRIGGER check_duration
BEFORE UPDATE on offering
FOR EACH ROW
BEGIN
SELECT c.duration
INTO duration
FROM course c
WHERE c.duration = 5
IF(:new.start_date BETWEEN to_date('01/01/2013', 'DD/MM/YYY') AND to_date('31/01/2013', 'DD/MM/YYY')
THEN RAISE_APPLICATION_ERROR(20100, 'Cannot run particular course during this month')
END IF;
END;
课程表:
Course_id(pk) | Title | Duration | Cost
报价表:
offering_id(pk) | start_date | location | instructor | course_id(fk)
还有另外两个表出勤率和学生我认为我不需要为这个问题发布这些表的构造
【问题讨论】:
-
你能贴出你试过的代码吗?
-
发布您的代码。触发器可以轻松运行查询,然后取决于您实际想要对结果执行的操作。
-
如果之后将持续时间更改为 5 天会发生什么情况(并且提供的记录中存在违反规则的记录?)
-
嗨蒂姆,持续时间是固定的
-
我会将持续时间放在产品表中。