如何解决ORA-02014:无法从DISTINCT,GROUP BY的视图中选择FOR UPDATE

时间:2011-05-03 17:04:55

标签: oracle ora-02014

我想使用以下查询锁定一组记录:

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。

我可以将rownumselect for update一起使用吗?

是否有另一种解决方案,使用select for update,但也只选择一组行,而不是选择所有结果?

例如,我有一个运行每个X内部的任务,需要对该表使用select for update,但如果select返回500行,我只想每次处理100个(分页类型) )。这就是我为此尝试rownum的原因。

感谢。

2 个答案:

答案 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可能会产生同样的影响,因为它是不确定的。