ожидание 2-й сесии на "select for update nowait"

Ivan4
Дата: 17.02.2014 17:20:50
Всем привет.

На компонентах ODAC (Delphi 5 Sp1) сделал в одном проекте запрос в компоненте TOraQuery:

select * from test where id=1 for update nowait

в другом проекте Delphi в TOraQuery написал:

UPDATE test set test.tt=1 where id=1

Запускаю 1-й проект. Открывается Запрос с блокировкой.
Запускаю 2-й проект. Запускаю запрос на UPDATE. Этот запрос (с update-ом) ждет пока не будет Commit от 1-го запроса. Мне же надо что бы он ошибку выдал мол запись занята 54-я оракловская, если не ошибаюсь. Почему 2-й запрос в ожидании вместо выдачи ошибки?

Пробовал ставить TOraQuery.LockMode.lmLockImmediate вместо ImNone. Разницы никакой.

При этом через тот же Toad сделал те же 2 запроса в той же последовательности и там сообщение выдается.

Что я не правильно делаю?
Dimitry Sibiryakov
Дата: 17.02.2014 17:24:28

Ivan4
Почему 2-й запрос в ожидании вместо выдачи ошибки?

Потому что у update нет nowait. А ты перед ним не сделал select for update nowait.

Posted via ActualForum NNTP Server 1.5

Ivan4
Дата: 17.02.2014 17:30:28
как это не сделал?

в select-е у меня есть "nowait"!
Ivan4
Дата: 17.02.2014 17:44:00
Все! Я понял в чем дело. Надо было во 2-й сессии перед "update table" сделать тоже "select for update". Вот тогда бы ошибка была бы. Вопрос закрыт.