|
|
|
select for update
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Нашел тут в старом коде такую конструкцию: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Запрос select вернет 1 запись, переменная EMP нигде не используется. Имеет ли смысл использовать для этого конструкцию select for update? Не проще ли оставить просто один update? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 14:43 |
|
||
|
select for update
|
|||
|---|---|---|---|
|
#18+
Кривенько конечно. Потенциальная проблема: Из кода не очевидно, что между select for update и update в таблице не может появится вторая запись с указанным ID. При наличии PK/UK - не актуально. Но все-таки если используется select for update - то логично делать update where current of Совсем убрать select for update можно только в процессе рефакторинга, воспроизведя или скорректировав реакцию кода на too_many_rows и no_data_found ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 15:04 |
|
||
|
select for update
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 15:05 |
|
||
|
select for update
|
|||
|---|---|---|---|
|
#18+
no data found Код: plsql 1. 2. 3. 4. 5. в случае когда id не уникально етого мало, ибо три записи уже будут изменены ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 15:52 |
|
||
|
select for update
|
|||
|---|---|---|---|
|
#18+
Поле ID является первичным ключем, так что запись может быть только одна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 08:18 |
|
||
|
select for update
|
|||
|---|---|---|---|
|
#18+
Tester666Поле ID является первичным ключем, так что запись может быть только одна. либо 0, что в случае select for update инициирует no data found ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 10:04 |
|
||
|
select for update
|
|||
|---|---|---|---|
|
#18+
Tester666Поле ID является первичным ключем, так что запись может быть только одна. подозреваю что в селекте изначально была кляюза wait/nowait, которой к сожленью нет в чистом update ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 10:48 |
|
||
|
select for update
|
|||
|---|---|---|---|
|
#18+
stax.., нет, этот кусок кода дошел до наших дней без изменений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 11:13 |
|
||
|
select for update
|
|||
|---|---|---|---|
|
#18+
Tester666stax.., нет, этот кусок кода дошел до наших дней без изменений. авторНашел тут в старом коде такую конструкцию: ето понятно что он счас такой, а каким он был изначально, хз я такую последовательность пользовал в двух случаях 1) order by для многострочного update (не подходіт із-за ПК) 2) wait/nowait ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 12:09 |
|
||
|
select for update
|
|||
|---|---|---|---|
|
#18+
В данном случае можно удалить. Но если тут бы был wait/nowait, то удалять не стоит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 12:24 |
|
||
|
select for update
|
|||
|---|---|---|---|
|
#18+
Мы историю изменений храним в свн. Видно, что изначально так было. Может во время написания до выкладки в свн что-то другое конечно было...но судя по тому, что у нас таких похожих моментов несколько найдено, налицо просто непонимание работы select for update. Спасибо всем, буду убирать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 13:41 |
|
||
|
select for update
|
|||
|---|---|---|---|
|
#18+
georgy_gВ данном случае можно удалить. Низзя. Случится сокрытие no_data_found. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 13:50 |
|
||
|
select for update
|
|||
|---|---|---|---|
|
#18+
Tester666налицо просто непонимание работы select for update. Или ты не понимаешь, что хотел сделать программист. Может это у него заготовка на случай развития для пессимистической блокировки. Или на тот же wait/nowait. В текущем виде, конечно, бесполезно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 14:07 |
|
||
|
select for update
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousСлучится сокрытие no_data_found. Ну раз человек уберет, то и в принимающей стороне подкрутит. Может ему вообще не важно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 14:11 |
|
||
|
select for update
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньевandrey_anonymousСлучится сокрытие no_data_found. Ну раз человек уберет, то и в принимающей стороне подкрутит. Может ему вообще не важно. Судя по постановке вопроса - не факт, что подкрутит. Скорее просто "оптимизирует". А проблема всплывет через много-много дней, когда данные могу быть уже сильно испохаблены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 14:19 |
|
||
|
select for update
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousКривенько конечно. Потенциальная проблема: Из кода не очевидно, что между select for update и update в таблице не может появится вторая запись с указанным ID. При наличии PK/UK - не актуально. Но все-таки если используется select for update - то логично делать update where current of Совсем убрать select for update можно только в процессе рефакторинга, воспроизведя или скорректировав реакцию кода на too_many_rows и no_data_found Я бы ужесточил формулировку update where current of обязательно нужно делать а то можно пролететь мимо ORA-01002 а FOR UPDATE объявляется для того что бы мимо не нее не пролететь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 18:31 |
|
||
|
select for update
|
|||
|---|---|---|---|
|
#18+
д0kХ Я бы ужесточил формулировку да, да, да особенно с учетом того что если where сильно не детерминировано то for update может 1) вернуть не заблокированные записи 2) заблокировать записи, которых нет в результируещем наборе ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 09:35 |
|
||
|
select for update
|
|||
|---|---|---|---|
|
#18+
stax..особенно с учетом того что если where сильно не детерминировано то for update может 1) вернуть не заблокированные записи Ммм? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 10:31 |
|
||
|
select for update
|
|||
|---|---|---|---|
|
#18+
Почему на форуме я вижу обсуждения только select for update? Почему нет for insert, for delete, for merge, for select в конце концов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 11:31 |
|
||
|
select for update
|
|||
|---|---|---|---|
|
#18+
yes_data_foundПочему на форуме я вижу обсуждения только select for update? Почему нет for insert, for delete, for merge, for select в конце концов? Может из за того, что Oracle до этого не додумался ?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 11:46 |
|
||
|
select for update
|
|||
|---|---|---|---|
|
#18+
yes_data_foundПочему на форуме я вижу обсуждения только select for update? Почему нет for insert, for delete, for merge, for select в конце концов? Потому что в концептах этого нет и не может быть ввиду архитектурных особенностей . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 11:47 |
|
||
|
select for update
|
|||
|---|---|---|---|
|
#18+
yes_data_foundПочему на форуме я вижу обсуждения только select for update? Почему нет for insert, for delete, for merge, for select в конце концов? И это я только dml перечислил. А есть ведь еще ddl. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 13:48 |
|
||
|
select for update
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousstax..особенно с учетом того что если where сильно не детерминировано то for update может 1) вернуть не заблокированные записи Ммм? В данном, конкретном случае наверное нет , а в принципе , если НЕ использовать where current of и в цикл обработки курсора втавить commit , то аж на расс .... докаRow Locks (TX) A row lock, also called a TX lock, is a lock on a single row of a table. A transaction acquires a row lock for each row modified by one of the following statements: INSERT, UPDATE, DELETE, MERGE, and SELECT ... FOR UPDATE. The row lock exists until the transaction commits or rolls back. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 15:45 |
|
||
|
select for update
|
|||
|---|---|---|---|
|
#18+
д0kХв цикл обработки курсора втавить commit Есть еще тысяча-и-один способ "выстрелить себе в ногу". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 16:15 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39477680&tid=1885696]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
168ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 468ms |

| 0 / 0 |
