powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Блокировка записи
7 сообщений из 7, страница 1 из 1
Блокировка записи
    #36958956
Parovozik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!Делаю многопользовательскую форму, когда один пользователь изменяет запись, она блокируется для другого пользователя, который хочет изменить ту же запись, ему (2-му меняющему) выводится сообщение "Невозможно зарезервировать запись (2 попыток). Продолжить попытки?", ну и кнопки "Да"/"Нет". Жмем "да" - это же сообщение продолжает выводиться и дальше, жмем "нет"-ошибка FRM-40501. Хотелось бы сделать так, чтобы эти сообщения и ошибка не появлялись, а вместо них предупреждение - "Запись недоступна для изменения, с ней работает другой пользователь". Не подскажете решение?
...
Рейтинг: 0 / 0
Блокировка записи
    #36959833
-=APS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On-LOCK trigger
...
Рейтинг: 0 / 0
Блокировка записи
    #36961233
Parovozik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
APS,
а что в нем написать, чтобы он не срабатывал для пользователя(срабатывал только блокируя запись), который первым блокирует запись?ну то есть, чтобы предлагаемое мною предупреждение выдавалось всем другим пользователям, которые пытаются изменить запись.
...
Рейтинг: 0 / 0
Блокировка записи
    #36961578
Jacobs Kaive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в триггере лоч запись с nowait и выводи ошибку если что
...
Рейтинг: 0 / 0
Блокировка записи
    #36964037
-=APS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Parovozik
А поискать не пытались? Говорят, очень полезная штука такая есть - гугл называется.
Кроме того, прямо на этом этом подфоруме недавно была такая тема.
ON-LOCK, ON-ERROR
...
Рейтинг: 0 / 0
Блокировка записи
    #36969082
Parovozik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-=APS=-,
Зачем эта издевка была, я вот не понимаю, вы пытаетесь за счет меня поднять самооценку? Молод и неопытен, каюсь, могу чего-то недопонимать...
По делу, искать, конечно же, пытался, только пока решить описанную проблему не получилось, отложил, буду смотреть вашу ссылку
...
Рейтинг: 0 / 0
Блокировка записи
    #37519747
Фотография pan159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эта тема возникает с поразительной регулярностью в этой ветке и в главной оракловой. Поэтому привожу свой вариант решения для поиска того, кто блокирует.

Создаем резидентную процедуру:
function who_blocked( idi number) return varchar2 is
inv_number number;
uname varchar2(80);
begin
select id into inv_number from invoice where id = idi for update nowait; -- это моя конкретная таблица и запись которую я проверяю на предмет блокировки, id - PK
return 'FREE'; -- запись свободна
exception
when NO_DATA_FOUND then
return 'NOT_FOUND'; -- задан ошибочный ключ записи
when others then
select oracle_username
into uname
from
(select s.username,
l.sid,
s.ACTION,
trunc(l.id1 / power(2, 16)) rbs,
bitand(l.id1, power(2, 16) - 1) + 0 slot,
l.id2 seq
from v$lock l, v$session s
where l.type = 'TX'
and l.sid = s.sid
and s.SCHEMANAME = 'Название схемы, где размещается таблица') a,
all_objects uo,
v$locked_object lo
where lo.XIDUSN = a.rbs
and lo.XIDSLOT = a.slot
and lo.XIDSQN = a.seq
and uo.object_id = lo.OBJECT_ID
and lo.SESSION_ID = a.SID
and uo.object_name = 'Название таблицы ( в моем случае -invoice)';
return 'Locked by '||uname;
end;

Надо будет дать права на чтение v$session, v$lock, v$locked_object всем юзерам-потребителям

В любом подходящем триггере типа key-others обращаемся для проверки записи на предмет блокировки.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Блокировка записи
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]