Oracle ORA-02089 с Java
Я получаю следующую ошибку при попытке вызвать хранимую процедуру PL/SQL из Java: ORA-02089: COMMIT is not allowed in a subordinate session
он отлично тестируется от Oracle. У кого-нибудь есть опыт в этом?
3 ответов
попробуйте эти способы;
- измените источник данных для использования Non-XA (и проверьте " поддерживает глобальный Транзакции" & "эмуляция двухфазной фиксации" кнопки)
- удалите фиксацию из кода.
- используйте "PRAGMA AUTONOMOUS_TRANSACTION". Это вид создать отдельная транзакция, которая позволит использовать commit.Для пример: создать процедуру XXX как Pragma AUTONOMOUS_TRANSACTION; начать ...
Что говорит документация oracle об ошибке:
COMMIT был выпущен в сеансе, который не является двухфазным глобальным 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;