在 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 条件匹配的行时,什么都不做。
我正在尝试编写一个触发器,在我更新另一个 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 条件匹配的行时,什么都不做。