11

次のクエリを使用して、レコードのグループをロックしたいと考えています。

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
);

主キーはフィールド ID です。

まったくrownum一緒に使用できますか?select for update

select for update選択からのすべての結果ではなく、行のグループだけを使用して選択する別の解決策はありますか?

たとえば、すべての X 内部を実行しselect for update、そのテーブルに使用する必要があるタスクがありますが、select が 500 行を返す場合、毎回 100 行を処理したいだけです (一種のページング)。だからこそ、そのために努力rownumした。

ありがとう。

4

1 に答える 1

19

これは機能しますか?:

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;
于 2011-05-03T19:01:22.137 に答える