|
Блокировка записи
|
|||
---|---|---|---|
#18+
Всем привет!Делаю многопользовательскую форму, когда один пользователь изменяет запись, она блокируется для другого пользователя, который хочет изменить ту же запись, ему (2-му меняющему) выводится сообщение "Невозможно зарезервировать запись (2 попыток). Продолжить попытки?", ну и кнопки "Да"/"Нет". Жмем "да" - это же сообщение продолжает выводиться и дальше, жмем "нет"-ошибка FRM-40501. Хотелось бы сделать так, чтобы эти сообщения и ошибка не появлялись, а вместо них предупреждение - "Запись недоступна для изменения, с ней работает другой пользователь". Не подскажете решение? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2010, 11:31 |
|
Блокировка записи
|
|||
---|---|---|---|
#18+
APS, а что в нем написать, чтобы он не срабатывал для пользователя(срабатывал только блокируя запись), который первым блокирует запись?ну то есть, чтобы предлагаемое мною предупреждение выдавалось всем другим пользователям, которые пытаются изменить запись. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2010, 12:00 |
|
Блокировка записи
|
|||
---|---|---|---|
#18+
в триггере лоч запись с nowait и выводи ошибку если что ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2010, 13:44 |
|
Блокировка записи
|
|||
---|---|---|---|
#18+
Parovozik А поискать не пытались? Говорят, очень полезная штука такая есть - гугл называется. Кроме того, прямо на этом этом подфоруме недавно была такая тема. ON-LOCK, ON-ERROR ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2010, 14:52 |
|
Блокировка записи
|
|||
---|---|---|---|
#18+
-=APS=-, Зачем эта издевка была, я вот не понимаю, вы пытаетесь за счет меня поднять самооценку? Молод и неопытен, каюсь, могу чего-то недопонимать... По делу, искать, конечно же, пытался, только пока решить описанную проблему не получилось, отложил, буду смотреть вашу ссылку ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2010, 10:42 |
|
Блокировка записи
|
|||
---|---|---|---|
#18+
Эта тема возникает с поразительной регулярностью в этой ветке и в главной оракловой. Поэтому привожу свой вариант решения для поиска того, кто блокирует. Создаем резидентную процедуру: 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 обращаемся для проверки записи на предмет блокировки. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2011, 12:58 |
|
|
start [/forum/topic.php?fid=51&msg=36958956&tid=1878603]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 145ms |
0 / 0 |