![](/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.