Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
Теоретические аспекты и практические реализации создания, внедрения и использования баз данных, СУБД, хранилищ.
  • Страница:
  • 1
  • 2
  • 3

ТЕМА:

Как отличить блокировки в Oracle 16 июль 2011 12:11 #2094

  • Olessa
  • Olessa аватар Автор темы
  • Не в сети
  • Новичок
  • Новичок
  • Сообщений: 42
  • Спасибо получено: 0
Здравствуйте!
Вообще задача такая:
Необходимо определить - есть ли в текущей сессии что откатывать или были только
SavePoint, Select for Update, пользовательские блокировки и т.п...

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Как отличить блокировки в Oracle 16 июль 2011 12:15 #2095

т.е. ты и вправду думаешь, что если был savepoint откатывать ничего не надо?
до кучи:
А в какой транзакции в текущей сессии?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Как отличить блокировки в Oracle 16 июль 2011 12:19 #2096

  • Olessa
  • Olessa аватар Автор темы
  • Не в сети
  • Новичок
  • Новичок
  • Сообщений: 42
  • Спасибо получено: 0

т.е. ты и вправду думаешь, что если был savepoint откатывать ничего не надо?

Надо/не надо - сейчас не обсуждается. Есть ли чего, то есть DML-операции? - вот в чём вопрос.

А в какой транзакции в текущей сессии?

Основной.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Как отличить блокировки в Oracle 16 июль 2011 12:26 #2097

select used_urec from v$transaction where addr = (select taddr from v$session where sid=sys_context('userenv', 'sid'));

Только вот зачем?

P.S. for update тоже надо откатывать.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Как отличить блокировки в Oracle 16 июль 2011 13:04 #2098

напрашивается естественный вопрос: зачем? Зачем определять, есть ли что откатывать? Вот Вы определили, что у Вас были только select for update и прочее незначительное - что дальше?

Можете SQL%ROWCOUNT накапливать в какой-нибудь переменной после DML-операторов, которые определяют, что есть что откатывать. Потом ориентируйтесь на её значение.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Как отличить блокировки в Oracle 16 июль 2011 13:06 #2099

  • Olessa
  • Olessa аватар Автор темы
  • Не в сети
  • Новичок
  • Новичок
  • Сообщений: 42
  • Спасибо получено: 0

select used_urec from v$transaction where addr = (select taddr from v$session where sid=sys_context('userenv', 'sid'));

Хэх. Это я уже попробовала. Отделить Select for update от просто Update таким способом не получается...

напрашивается естественный вопрос: зачем?

Хорошо. Попробую объяснить.
Разрабатываемый модуль умеет вызывать произвольную формочку, которую могут разработать независимые разработчики.
Перед вызовом формочки я ставлю SavePoint и блокирую некую "текущую запись".

После возвращения мне управления возможны следующие реакции
1. Вызываемая форма сделала Commit. Я ничего не делаю
2. Форма не сделала никаких DML-операций, но и не завершила транзакцию. Мне нужно откатить до SavePoint
3. Форма сделала какие-то DML-операций и не завершила транзакцию. Мне не нужно ничего делать

Нельзя сказать, что к разработке форм не предъявляется никаких требований. Какие-то соглашения всё же есть. Но они вовсе не жёсткие.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
  • 2
  • 3