|
ORA-00164: autonomous transaction disallowed within distributed transaction
|
|||
---|---|---|---|
#18+
Всем привет! Помогите, пожалуйста, разобраться со следующей проблемой. Вобщем есть PLSQL скрипт , PLSQL пакет и PLSQL процедура. В скрипте происходт вызов процедуры из пакета и процедуры отдельной от пакета. При выполнении скрипта возникает ошибка ORA-00164: autonomous transaction disallowed within distributed transaction. Структурно скрипт можно описать так: declare cursor cur is select * from clients@dblink; begin open cur; -- fetch cur into yy; -- if cur%notfound then -- close cur; exit; -- end if; -- close cur; -- -- далее идет несколько селектов из другой базы -- через db link. Селекты типа: -- select * into aa from sale@dblink where sale_id=yy.sale_id; -- -- потом вызывается процедура из пакета. в пакете -- нету обращений к другой базе через линки. -- package_body.package(yy.id,aa.name ...); -- -- затем вызывается отдельная процедура в которой -- нет обращения к другой базе через линк, но есть -- автономная транзакция и как раз на этой процедуре -- вознакие ошибка ORA-00164. -- oth_procedure(); -- end; Подскажите,пожалуйста, с чем связана ошибка и как ее можно побороть. Заранее БОЛЬШОЕ спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2002, 17:21 |
|
ORA-00164: autonomous transaction disallowed within distributed transaction
|
|||
---|---|---|---|
#18+
>package_body.package(yy.id,aa.name ...); Я думаю, что проблема тут во входных параметрах, которые хоть и независимые переменные, но наверняка имеют тип записи курсора открытого на удаленной базе. Возможно, что тип проверяется в run-time, отсюда и ошибка. если б Вы привели тексты процедур полностью было бы понятней. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2002, 18:20 |
|
ORA-00164: autonomous transaction disallowed within distributed transaction
|
|||
---|---|---|---|
#18+
Problema coctoit b tom chto transaksiiy nachinaetcy c COMMIT i zakanchivaetcy COMMIT(ROLLBACK). pockolku mezdu > select * > into aa > from sale@dblink > where sale_id=yy.sale_id;-- i proceduroiy c pragmoy AUTONOMOUS_TRANSACTION net COMMIT to poluchaetciy ORA-00164: autonomous transaction disallowed within distributed transaction. dalee avtonomnaia tranzakciya eto to chto yavno obyavleno kak AUTONOMOUS_TRANSACTION a ne: -- затем вызывается отдельная процедура в которой -- нет обращения к другой базе через линк, но есть -- автономная транзакция и как раз на этой процедуре -- вознакие ошибка ORA-00164. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2002, 18:33 |
|
ORA-00164: autonomous transaction disallowed within distributed transaction
|
|||
---|---|---|---|
#18+
Т.е. что, мне надо поставить commit после селектов и до вызова процедуры? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2002, 14:21 |
|
ORA-00164: autonomous transaction disallowed within distributed transaction
|
|||
---|---|---|---|
#18+
primer oformleniya avtonomnoiy tranzakcii create or replace function is_another_module(p_course_id number, p_module_id number) return boolean is pragma autonomous_transaction; n number; begin select 1 into n from modules where p_course_id = course_id and p_module_id <> module_id; return true; exception when no_data_found then return false; when too_many_rows then return true; when others then return false; end; / show errors; ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2002, 19:07 |
|
ORA-00164: autonomous transaction disallowed within distributed transaction
|
|||
---|---|---|---|
#18+
2imklmnoprst: Да, именно так. Тебе нужно commit'ом отделить транзакцию состоящую из выборок из через линк, от собственно обработки, которая уже локальная, и зовёт твою автономно-транзакционную процедуру. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2002, 01:28 |
|
ORA-00164: autonomous transaction disallowed within distributed transaction
|
|||
---|---|---|---|
#18+
Могу добавить, что впервые с сабжем столкнулся после перехода с 8.1.6 на 8.1.7, что заставило переписывать некоторые участки кода. В 9.0.1 ситуация не изменилась, но после перехода на 9.2.0 заново заработали вещи, связанные с использованием вызова процедур с pragma autonomous_transaction через db link. Так что версия оракла в данном случае весьма существенна. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2002, 11:13 |
|
|
start [/forum/topic.php?fid=52&msg=32072975&tid=1992585]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
323ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 10ms |
total: | 417ms |
0 / 0 |