ORA-00036: максимальное количество рекурсивных уровней SQL (50) превышено после настройки toplink для использования переменных связывания - PullRequest
4 голосов
/ 20 мая 2011

У меня есть приложение, которое использует Toplink для персистентности и базы данных Oracle. Недавно у меня были проблемы с производительностью, особенно на уровне БД / запросов. У меня есть большой кусок логики в связке триггеров и хранимых процедур, плохо написанных, с обходными путями для проблемы мутации триггера. Приложение находится в производстве уже несколько лет, и переписывает этот код как последнее решение, учитывая бюрократию получения одобрения для новой версии и другие более высокие приоритеты. Поэтому я ищу быстрое решение.

Одним из решений для повышения производительности является использование переменных связывания. Моя проблема заключается в том, что после добавления bind-all-variable и cache-all-операторов в sessions.xml в toplink на определенном пользовательском интерфейсе, который запускает дрянной код и прекрасно работает перед внесением изменений в конфигурацию, я получаю эту ошибку:

ORA-00036: максимальное количество рекурсивных уровней SQL (50) превышено

Мои вопросы: почему эта ошибка отображается только после того, как я добавил параметр bind-variable? Что я могу сделать, чтобы он работал с переменными связывания, не меняя дерьмовый код?

1 Ответ

2 голосов
/ 21 мая 2011

"с обходными путями для проблемы мутирующего триггера"

Это звучит страшно, так как большинство из этих обходных путей вращаются вокруг автономных транзакций, которые (а) не работают особенно хорошо и (б), вероятно, считаются рекурсивным SQL.

С другой стороны, наличие логики в PL / SQL обычно означает, что проблема заключается не в переменных связывания, так как в PL / SQL нужно приложить большие усилия, чтобы не использовать связывания.

В этом случае я бы сказал, что ваше время лучше потратить на устранение / замену любых обходных путей для таблицы мутаций на прочное основание, а не на связывание проблем с переменными.

...