gpt4 book ai didi

java - 是否可以从Java代码调用数据库触发器?

转载 作者:行者123 更新时间:2023-12-01 18:41:25 25 4
gpt4 key购买 nike

我搜索了一下,找到了一些关于如何从数据库触发器调用java代码的信息,但没有找到相反的信息。不是可以从java方法调用触发器吗?插入到一个表(表 1)后,我需要通过第一个表的选择向另一个表(表 2)创建几行。我构建了触发器,但如果我让它在第一个表上插入后执行,则会收到错误:

ORA-04091: table Table1 is mutating, trigger/function may not see it ORA-06512:.... 

我正在开发一个 ADF 应用程序,并且由于 Table1-Table2 具有主从关系,因此可能不允许以这种方式插入行。这就是为什么我认为通过按钮调用触发器可以解决我的问题。有什么想法吗?

触发:

CREATE OR REPLACE TRIGGER Table2
AFTER INSERT ON Table1 REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
insert into Table2
(
Select col1,col2... from Table1
);
END;

最佳答案

触发器不能直接调用,它们仅在插入/更新/删除行之前/之后执行。

问题在于,在触发器中,您尝试访问已为其创建触发器的表,这会导致突变触发器错误,因为触发器不会看到表中的更改。

您可以显示触发器代码的使用吗?为什么您必须访问该表?也许您可以只使用存储过程来实现您需要的并调用它?

编辑

如果您想访问插入行中的值,您应该使用 :new 伪记录:

CREATE OR REPLACE TRIGGER Table2
AFTER INSERT ON Table1 REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
insert into Table2 values (:new.some_col, :new.some_col2, <other columns>);
END;

关于java - 是否可以从Java代码调用数据库触发器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19854793/

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