【发布时间】:2016-10-16 13:19:24
【问题描述】:
我正在尝试创建一个触发器,当添加新行时,该触发器将值从同一表的一列(“notubes”)复制到同一表的另一列(“notubesleft”)。触发器编译正确但是当我插入一个新行,它会引发错误。
我的触发器是:
create or replace TRIGGER NOTUBESLEFT_INSERT_TRIGGER
AFTER INSERT ON SAMPLES FOR EACH ROW BEGIN
update samples
set notubesleft = (select notubes from samples where sampleid = :new.sampleid);
END;
当我尝试提交新行时出现错误:
保存对表“APEX_WS_PROMETHEUS”的更改时出错。“SAMPLES”:
第 10 行:ORA-04091:表 APEX_WS_PROMETHEUS.SAMPLES 正在变异, 触发器/函数可能看不到它
ORA-06512:在“APEX_WS_PROMETHEUS.NOTUBESLEFT_INSERT_TRIGGER”,第 2 行 ORA-04088: 执行触发器“APEX_WS_PROMETHEUS.NOTUBESLEFT_INSERT_TRIGGER”时出错
ORA-06512: 在第 1 行
我问了一个新问题,因为我可以找到有关如何构造触发器的 PL/SQL 代码的解决方案,但我不知道为什么它不起作用。
谢谢。
【问题讨论】:
-
您为什么要尝试使用插入后触发器来执行此操作?
-
因为我认为我首先需要在表中插入值,然后才能使用它们填充另一列。这是我的第一个触发器。
标签: oracle oracle-sqldeveloper