【发布时间】:2021-03-31 10:32:11
【问题描述】:
我的 apex oracle 数据库中有一个表 EMP,其中包含名为 sal 的薪金属性。我有另一个表 EMPSAL,它有 3 个名为 averageSal、minSal、maxSal 的属性,每当对 EMP 表的 sal 列执行任何 DML 操作时,都将使用触发器更新这些属性。这是用于升级的触发器:
create or replace trigger empsal_update_trigger
AFTER update on emp
for each row
declare
avgSal2 emp.sal%type;
minSal2 emp.sal%type;
maxSal2 emp.sal%type;
begin
select avg(sal), min(sal), max(sal) into avgSal2, minSal2, maxSal2 from emp;
delete from empsal;
insert into empsal values(avgSal2, minSal2, maxSal2);
end;
插入和删除触发器工作正常,但上面给出的更新在 EMPSAL 中更新 A 记录时会出错。我试过用before关键字代替after,但是没用。
【问题讨论】:
-
“更新上面给出的错误” - 什么错误?请edit在正文中完整引用。
-
您正在尝试从 emp 中选择所有记录,同时在触发器中更新它。你不能那样做。每次触发器触发时,您也会删除 empsal 中的每一行。我建议阅读documentation
-
标题中提到了错误。
-
请求是在问题正文中完整引用错误。不要试图缩写或解释它,显示一个实际的示例查询以及该查询给你的确切错误消息。
-
与其使用触发器,不如将 EMPSAL 设为物化视图并由内置数据库功能自动维护。