Reputation: 2627
I'm getting the following error when trying to call a PL/SQL stored procedure from Java: ORA-02089: COMMIT is not allowed in a subordinate session
It tests fine from Oracle. Does anyone have any experience with this?
Upvotes: 10
Views: 29890
Reputation: 6738
Try this ways;
Upvotes: 13
Reputation: 6020
What does the oracle documentation say about the error:
COMMIT was issued in a session that is not the two-phase commit global coordinator.
Basically you are executing a distributed transaction. As part of a distributed transaction you are trying to invoke an autonomous transaction. This is not possible as distributed transactions are required to do a 2PC.
Upvotes: 4
Reputation: 2627
Hmm, I think it's related to XA. It works fine when I bracket the stored procedure with 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;
Upvotes: 0