【发布时间】:2014-03-10 20:41:10
【问题描述】:
我正在尝试为我的“rentals”表创建一个触发器,当前一个表中发生更新时,该触发器将更改另一个表中某个列 (“rent_avail”) 中的值。这个想法很简单:当 dvd 被退回到 dvd 商店时(即 date_return 有一个日期值,dvd 现在又可以出租了。因此,我有问题的记录 (dvd) 的“rent_avail”列应该反映这一点通过设置为“Y”(当当前租用 DVD 时,替代选项为“null”)。我的触发器正在创建而没有错误,但是在 date_return 列上插入后,我的 DVD 表中的所有值都被更改.我想知道如何简单地修改我的 DVD 表中“rent_avail”列中的列值,仅用于更新的行!这可能很简单,但我已经研究过了,似乎无法轻松找到解决方案..
CREATE OR REPLACE TRIGGER RENTAL_RETURNS
AFTER UPDATE OF DATE_RETURN ON RENTAL
FOR EACH ROW
BEGIN
IF :OLD.DATE.RETURN IS NULL AND :NEW.DATE_RETURN IS NOT NULL THEN
UPDATE DVD SET RENT_AVAIL = 'Y' WHERE DVD.DVD_ID = DVD_ID;
END IF;
END;
/
【问题讨论】:
-
RENTAL 表中的 foreign_key 列 dvd_id 的名称是什么?
-
我的外键是 RENTAL TABLE 和 DVD 表中的 DVD_ID..
-
我是这么认为的:)。检查我的答案
-
帮助很大,桑迪普。太感谢了。 :) 最后一个问题,新的代码改变了 DVD 表中的rent_avail 的值,但是如果我在 DVD 中插入一条新记录,或者插入一个新的出租实例,它会将rent_avail 中的所有值恢复为空,所以最近更新的记录中只会有一个“Y”...这是否需要另一个触发器?
-
首先,如果您可以尝试删除 Trigger 并调整您的代码,但如果目前您还不能这样做,那么 trigger 很好,但请保留它在您未来的待办事项列表中删除触发器依赖项。
标签: plsql triggers sql-update multiple-tables