Как решить ORA-02014: невозможно выбрать FOR UPDATE из вида с помощью DISTINCT, GROUP BY - PullRequest
9 голосов
/ 03 мая 2011

Я хочу заблокировать группу записей, используя следующий запрос:

select *
  from (select *
          from event_table
         where status = 'S'
        order by creation_data asc
       )
 where rownum <=10
for update;

event_table не является представлением.Это обычная таблица:

create table event_table
(
 id            number, 
 creation_date date, 
 status        number, 
 info          clob
);

Первичным ключом является идентификатор поля.

Можно ли вообще использовать rownum с select for update?

Есть лидругое решение, где используется select for update, но также выбирается только группа строк, а не все результаты из select?

Например, у меня есть задача, которая запускает каждый внутренний X и должна использовать select for update дляв этой таблице, но если select возвращает 500 строк, я просто хочу обрабатывать 100 из них каждый раз (вид подкачки).Вот почему я попытался rownum для этого.

Спасибо.

Ответы [ 2 ]

13 голосов
/ 03 мая 2011

Это работает?:

select * from event_table where id in 
(
    SELECT id
    FROM (SELECT *
        FROM event_table
        WHERE status = 'S'
        ORDER BY CREATION_DATA ASC)
        WHERE ROWNUM <=10
)
FOR UPDATE;
0 голосов
/ 03 мая 2011

Что такое 'event_table'?Звучит так, что 'event_table' - это фактически представление, результаты которого являются агрегатными (отличными, сгруппированными и т. Д.).Вы не сможете подготовить сводные результаты для обновлений.Я не уверен на 100%, но rownum может вызвать такой же эффект, поскольку он не определен.

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