在 WHERE IN 子句中使用 %ROWTYPE

Using a %ROWTYPE in a WHERE IN clause

我正在尝试编写一个触发器,在我更新另一个 table TRIGGERTEST1 时从我的 table TRIGGERREF1 中删除某些行。 这是代码:

create or replace TRIGGER "DELETEBYUPDATE_TRIGGERTEST1" BEFORE UPDATE ON TRIGGERTEST1
FOR EACH ROW
DECLARE 
    referencedItems TRIGGERREF1%rowtype;
BEGIN 
    SELECT * INTO referencedItems FROM TRIGGERREF1 WHERE OWNER = :New.ID;
    EXCEPTION WHEN NO_DATA_FOUND THEN RETURN;
    DELETE FROM TRIGGERREF1 a WHERE a.OWNER IN referencedItems;
END;

DELETE FROM TRIGGERREF1 a WHERE a.OWNER IN referencedItems;

无法编译,因为显然您不能执行 WHERE IN %ROWTYPE 条件。

有没有办法使它工作,或者我是否需要在不使用 %ROWTYPE 的情况下解决我的问题?

那可能是这样的

DELETE FROM TRIGGERREF1 a WHERE a.OWNER = referencedItems.owner;
                                        ^                ^^^^^^^
                                       this              this

即您将引用 rereferncedItems.

中的一列

为什么不干脆直接删除?

create or replace TRIGGER "DELETEBYUPDATE_TRIGGERTEST1" BEFORE UPDATE ON TRIGGERTEST1
FOR EACH ROW
DECLARE 
BEGIN 
    DELETE FROM TRIGGERREF1 a WHERE a.OWNER = :New.ID;
END;

因为,当没有与您的 WHERE 条件匹配的行时,什么都不做。