Oracle и TSQL оператор NO LOCK - PullRequest
       0

Oracle и TSQL оператор NO LOCK

4 голосов
/ 03 января 2012
select max(Key) from MyTable with(nolock)

У меня есть этот оператор T-SQL, но мне нужно использовать один оператор и для SQL Server, и для Oracle, конечно, «with (nolock)» не распознается Oracle. Есть ли способ с этим утверждением, которое будет работать в обеих базах данных. Оракулом, игнорирующим «with (nolock)», или только Sqlserver, использующим эту часть выражения, или способом или закодированным, что оба понимают.

Причина, по которой я использую No lock, заключается в том, что несколько пользователей обращаются к одной и той же таблице, и мне нужно найти максимальное значение во время транзакций.

Oracle работает немного иначе, поэтому мне не нужно беспокоиться о блокировках таблиц.

1 Ответ

5 голосов
/ 03 января 2012

Ваши запросы делают разные вещи.Какова семантика запроса?Предполагается ли возвращать max(Key), включая эффект незафиксированных транзакций, как указывает ваша версия SQL Server?Если это так

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
select max(Key)
from MyTable;

Это та же семантика. Синтаксис должен отлично работать на обоих AFAIK.

Если вместо этого вы хотите последний зафиксированный max(Key), вам нужно будет изменить базу данных SQL Server, чтобы по умолчанию использовать изоляцию моментального снимка для чтения, чтобыведет себя более похоже на Oracle.Или же вы можете получить аналогичную семантику с подсказками ROWLOCK,READPAST, но тогда вам снова понадобятся два разных запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...