繁体   English   中英

PL / SQL触发器更新另一个表的列中的选定行

[英]PL/SQL Triggers to update selected rows in column in another table

我正在尝试为我的“租金”表创建一个触发器,当前一个表中发生更新时,它将更改另一个表中某个列(“ 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;
/

您的更新语句不是从父表rebtal中选择dvd_id,而是像dvd_id = dvd_id一样进行评估,它将始终为TRUE。 只是ad:OLD限定词,您应该会很好,考虑到这与Rental表中的列名(dvd_id)相同。

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 = :OLD.DVD_ID;
    END IF;
END;

在我看来,IF语句中应该有一个下划线-我认为应该读为

IF :OLD.DATE_RETURN IS NULL AND :NEW.DATE_RETURN IS NOT NULL THEN`

分享并享受。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM