![](/img/trans.png)
[英]Update one table from another table in pl\sql or oracle (only the rows changed from CDC table)
[英]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.