我想使用以下查询锁定一组记录:
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
的原因。
感谢。
答案 0 :(得分:13)
这有效吗?:
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;
答案 1 :(得分:0)
什么是'event_table'?听起来'event_table'实际上是一个视图,其结果是聚合(不同,分组等)。您将无法为更新准备汇总结果。我不是100%肯定,但rownum可能会产生同样的影响,因为它是不确定的。