【发布时间】:2019-09-07 07:18:38
【问题描述】:
我有一个像 bugs_metadata 这样的表 创建表 bugs_metadata(REPORT_NAME varchar2(10), WHERE_CLAUSE varchar2(100)); 插入 bugs_metadata('test','29603754,29605708,29649865'); 在更新上表中的 WHERE_CLAUSE 列时,我在下面的触发器中收到“变异,触发器/函数可能看不到它”错误:
create or replace TRIGGER "c_b_c_b_update" AFTER
UPDATE ON bugs_metadata
FOR EACH ROW
BEGIN
CASE
WHEN UPDATING('WHERE_CLAUSE') THEN
IF :NEW.WHERE_CLAUSE is not null THEN
insert into bug_data(BUG_NUMBER,SUBJECT)
select rptno,SUBJECT
from rpthead
where rptno in (select regexp_substr(:NEW.WHERE_CLAUSE,'[^,]+',1,level) WHERE_CLAUSE
from bugs_metadata t2
connect by regexp_substr(:NEW.WHERE_CLAUSE,'[^,]+',1,level) is not null )
and rptno not in(select bug_number from bug_data);
END IF;
END CASE;
END;
你能告诉我这里有什么问题吗?
【问题讨论】:
-
错误信息一目了然。您的触发器位于
bugs_metadata表上,并且还使用该表INSERT INOT bug_data ... SELECT ... WHERE ... bugs_metadata。 -
您能否建议一种方法来克服这个问题并实现相同的功能。
-
您不应该使用您尝试构建触发器的
bugs_metadata表来形成您的查询。您可以将bugs_metadata替换为dual。所以,考虑@Littlefoot 的回答。
标签: oracle plsql database-trigger