gpt4 book ai didi

sql - 表 EMP 正在发生变化,触发器/函数可能看不到它错误

转载 作者:行者123 更新时间:2023-12-04 01:09:12 26 4
gpt4 key购买 nike

我的 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 但没用。

最佳答案

对于这种情况,您不需要行级触发器,但使用语句级触发器。甚至不需要通过使用 INSERT INTO ... SELECT... 语句来使用局部变量定义。

所以,只需删除 FOR EACH ROW 例如

CREATE OR REPLACE TRIGGER empsal_update_trigger AFTER UPDATE ON emp
BEGIN
DELETE empsal;
INSERT INTO empsal
SELECT AVG(sal), MIN(sal), MAX(sal)
FROM emp;
END;
/

关于sql - 表 EMP 正在发生变化,触发器/函数可能看不到它错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65396534/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com