Есть ли вариант использования для вложенных автономных транзакций? - PullRequest
0 голосов
/ 01 февраля 2010

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

Можете ли вы дать мне какие-нибудь идеи?

Edit:

Я имею в виду что-то вроде этого:

PROCEDURE outer_procedure
IS
BEGIN
  -- some code
  auto_proc1;
END;
/

PROCEDURE auto_proc1
IS PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
  -- some code
  auto_proc2;
END;
/

PROCEDURE auto_proc2
IS PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
  -- some code
  NULL;
END;
/

Ответы [ 2 ]

2 голосов
/ 01 февраля 2010

Автономные транзакции могут быть полезны для ситуаций, таких как:

  • Когда вы хотите записать информацию о транзакции в таблицу, даже если эта транзакция не удалась / откатывается. Если вы сделаете это без автономных транзакций, ведение журнала также будет отменено.

  • Если у вас длинная транзакция, для которой требуется короткая блокировка таблицы, которая также используется другими потоками. Если вы сделаете это в автономной транзакции, блокировка будет удерживаться в ближайшее время, даже если транзакция занимает много времени.

0 голосов
/ 01 февраля 2010

Это может быть немного натянуто, но я считаю, что это довольно распространенный случай в сценариях интеграции:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...