Как обойти ORA-02014: невозможно выбрать FOR UPDATE в представлении с помощью DISTINCT, GROUP BY и т. Д. - PullRequest
3 голосов
/ 02 июля 2010

Я хочу заблокировать одну запись в таблице. Запись указана как «следующая, идентификатор которой больше ...»

CREATE TABLE test (id number);

SELECT id
FROM (SELECT id 
      FROM test
      WHERE id > 10
      ORDER BY id)
WHERE ROWNUM = 1
FOR UPDATE;

Это кажется интуитивно понятным и простым. Но это не так. Есть идеи?

приписка

Мне нужно, чтобы существующий запрос остался прежним, потому что это курсор, и есть несколько мест, которые используют этот тип строки курсора%.

1 Ответ

6 голосов
/ 02 июля 2010

Я думаю, вам понадобится что-то вроде:

SELECT id
  FROM test
 WHERE id =
       (SELECT MIN(id) 
          FROM test
         WHERE id > 10)
FOR UPDATE;
...