gpt4 book ai didi

sql - 触发器 Oracle 中插入行的值

转载 作者:搜寻专家 更新时间:2023-10-30 21:45:48 25 4
gpt4 key购买 nike

我想要一个更新列值的触发器,但我只想更新一小部分行,这些行取决于插入行的值。我的触发器是:

CREATE OR REPLACE TRIGGER example
AFTER INSERT ON table1
FOR EACH ROW
BEGIN
UPDATE table1 t
SET column2 = 3
WHERE t.column1 = :new.column1;
END;
/

但是当我使用 FOR EACH ROW 时,我在尝试时遇到了问题,我得到了变异表运行时错误。其他选项是不设置 FOR EACH ROW,但如果我这样做,我不知道插入的“column1”用于比较(或者我不知道如何知道它)。

我可以做什么来更新一组依赖于最后插入的行的行?

我正在使用 Oracle 9。

最佳答案

您应该避免在触发器中定义的同一个表上使用 DML 语句。使用 before DML 更改当前表的值。

create or replace trigger example
before insert on table1
for each row
begin
:new.column2 := 3;
end;
/

你可以用 pragma autonomous_transaction 修改同一张表:

create or replace trigger example
after insert on table1 for each row
declare
procedure setValues(key number) is
pragma autonomous_transaction;
begin
update table1 t
set column2 = 3
where t.column1 = key
;
end setValues;
begin
setValues(:new.column1);
end;
/

但我建议您按照@GordonLinoff 回答您的问题 - 在触发器主体中修改同一个表是个坏主意。

另见 here

关于sql - 触发器 Oracle 中插入行的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43155188/

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