簡體   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