|
|
|
Блокировка строки
|
|||
|---|---|---|---|
|
#18+
Привет. Можно ли в Oracle заблокировать для редактирования какую нибудь строку в таблице. Это нужно для того, чтобы если один юзер работает с этой строчкой другие с ней не работали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 15:00:55 |
|
||
|
Блокировка строки
|
|||
|---|---|---|---|
|
#18+
select ... for update ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 15:12:09 |
|
||
|
Блокировка строки
|
|||
|---|---|---|---|
|
#18+
А если еще хочется чтобы другие юзеры не ждали пока снимится блокировка с этой строки а сразу получали отлуп если она заблокирована, то эти юзеры должны вызывать select ... for update ... nowait; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 15:24:52 |
|
||
|
Блокировка строки
|
|||
|---|---|---|---|
|
#18+
"А если еще хочется чтобы другие юзеры не ждали пока снимится блокировка с этой строки а сразу получали отлуп если она заблокирована, то эти юзеры должны вызывать select ... for update ... nowait;" а зачем select for update. обновлять то не всегда надо. если это просто просмотровая форма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 15:50:22 |
|
||
|
Блокировка строки
|
|||
|---|---|---|---|
|
#18+
обновлять то не всегда надо. если это просто просмотровая форма. Это уже зависит от логики приложения. Если просто просмотровая форма, то конечно не надо, вообще тогда блокировки пофигу. Однако если все же данные меняются, то может быть не очень приятно - ввел новые данные нажал submit и приложение подвисло в ожидании снятия блокировки. А потом еще и отлуп получить можно. select ... for update ... nowait можно делать не сразу при выборке а непосредственно перед выполнением DML операторов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 15:58:51 |
|
||
|
Блокировка строки
|
|||
|---|---|---|---|
|
#18+
"можно делать не сразу при выборке а непосредственно перед выполнением DML операторов." а как этотот момен непосредственно перед выполнением DML операртора определить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 17:00:33 |
|
||
|
Блокировка строки
|
|||
|---|---|---|---|
|
#18+
Большой спасиб ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 17:06:44 |
|
||
|
Блокировка строки
|
|||
|---|---|---|---|
|
#18+
и как ты делать будешь ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 17:22:36 |
|
||
|
Блокировка строки
|
|||
|---|---|---|---|
|
#18+
Легко, например если в форме (Delphi) клиент уже изменил некое поле, но еще не нажал кнопку Apply, он явно хочет изменить запись. Делаем select for update nowait. Если возвращает ошибку, не судьба ему редактировать, вернуть прежнее значение в отредактированное поле и обругать его нехорошим словом. Уверен, что в Forms-ах можно сделать, что-то анологичное, сам с ними не работаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2003, 08:45:38 |
|
||
|
Блокировка строки
|
|||
|---|---|---|---|
|
#18+
и как ты делать будешь ? Там где в приложении посылается DML запрос, непосредственно перед ним и выполнять а потом проверять на успешность, если все плохо сообщать пользователю что он изменить запись не сможет, всяко лучше чем висящее ожидание с последующим отлупом. Здесь вопрос скорее когда блокировать. Я делаю обычно так. Выбираю набор записей без блоикирования for update для просмотра. В маске у меня есть кнопка редактировать, выбрав некоторые записи и нажав ее - уже пытаюсь блокировать данные записи for update nowait. При этом сразу выясняется сможет ли пользователь изменить эти записи или нет и гарантируется что другой этого сделать не сможет. Это и экономит усилия пользователя - не совсем приятно вносить изменения а потом получать отлуп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2003, 10:07:24 |
|
||
|
Блокировка строки
|
|||
|---|---|---|---|
|
#18+
Есть ещё недокументированная фича select ... for update... skip locked ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2003, 10:13:39 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32192875&tid=1989771]: |
0ms |
get settings: |
9ms |
get forum list: |
9ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
197ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 476ms |

| 0 / 0 |
