尝试从 Java 调用 PL/SQL 存储过程时出现以下错误:ORA-02089: COMMIT is not allowed in a subordinate session
它从 Oracle 测试良好。有人对这个有经验么?
试试这种方法;
oracle 文档对错误有什么看法:
COMMIT 在不是两阶段提交全局协调器的会话中发出。
基本上你正在执行一个分布式事务。作为分布式事务的一部分,您正在尝试调用自治事务。这是不可能的,因为分布式事务需要执行 2PC。
嗯,我认为它与XA有关。当我用AUTONOMOUS_TRANSACTION Pragma将存储过程括起来时,它工作正常:
PROCEDURE foo (val IN VARCHAR2(4000)) is
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO tbl1 VALUES (val);
DELETE FROM tbl2;
COMMIT;
END foo;