Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Mike
Зарегистрирован: 17.11.2001 Сообщения: 339 Откуда: ekb
|
Добавлено: Пт Сен 05 2003 07:51 Заголовок сообщения: Ну хорошо, пускай оракл, но как в нем узнать, блокирована ли запись ? |
|
|
Дело в том, что при блокировке записи с помощью например SELECT ..... FOR UPDATE происходит блокировка всех остальных транзакций, которые пытаются работать с заблокированными данными, а это не хорошо, пользователю не понравится, что у него программа виснет периодически ... надо, чтобы был способ проверить, заблокирована ли запись |
|
Вернуться к началу |
|
 |
Mike
Зарегистрирован: 17.11.2001 Сообщения: 339 Откуда: ekb
|
Добавлено: Пт Сен 05 2003 07:53 Заголовок сообщения: Уточнение |
|
|
Есть ли в оракле возможность сделать что-то типа TryEnterCriticalSection ? |
|
Вернуться к началу |
|
 |
hydroliser Гость
|
Добавлено: Пт Сен 05 2003 09:21 Заголовок сообщения: Re: Уточнение |
|
|
declare res_busy exception; pragma exception_init(res_busy,-54); begin select field_name into var_name from table_name [where where_clause] for update nowait; ....... exception when res_busy then busy_exception_handler; [when others then other_exception_handler;] end; |
|
Вернуться к началу |
|
 |
hydroliser Гость
|
Добавлено: Пт Сен 05 2003 09:34 Заголовок сообщения: Re: Уточнение |
|
|
пояснение к предыдущему реплаю: инструкция nowait в предложениях блокировки требует немедленной блокировки ресурса без ожидания таймаута освобождения ресурса - иначе возникает ошибка ORA-00054 resource busy and acquire with NOWAIT specified. Поскольку для этой ошибки нет предопределенного исключения, мы объявляем свое, а потом пытаемся блокировать ресурс, и в случае его занятости передаем управление в обработчик объявленного исключения. |
|
Вернуться к началу |
|
 |
|