保留订单,选择...其中输入并锁定线条

时间:2013-07-10 08:41:15

标签: java sql select

我在java中有以下准备好的语句:

with main_select as 
  (select request_id,rownum iden
   from 
    (select request_id
     from queue_requests
     where request_status = 0 and
           date_requested <= sysdate and
           mod(request_id,?) = ?
     order by request_priority desc, oper_id, date_requested)   
   where rownum < ?) 

select *
from queue_requests qr, main_select ms
where qr.request_id in ms.request_id
order by ms.iden for update skip locked;

它不会执行:

ORA-02014:无法从DISTINCT,GROUP BY等视图中选择FOR UPDATE

我将尝试解释为什么我需要所有的select语句:

  • 第一个(内部)选择获取我需要的数据
  • 第二个将行数限制为一个数字(我不能把它放在第一个选择中,因为oracle首先限制结果并且只在命令它们之后,这不是我想要的)
  • 第三个(外部)选择保留顺序(我尝试使用3个嵌套选择 - 所以,没有带子句 - 但在这种情况下我找不到保存顺序的方法)。此外,它应该锁定queue_requests表中的行,但是因为我从with子句中选择了数据,所以它给出了上述错误。

所以,我想从queue_requests中选择数据,保留前x行,保留select的顺序并锁定行。

有办法吗?

1 个答案:

答案 0 :(得分:0)

问题似乎是,您想要对main_select的结果设置锁定。我猜,你可以在with子句中选择select for update,如:

with main_select as 
  (select request_id,rownum iden
   from (subselect)
   where rownum < ?
   for update skip locked)

但正如我所说的那样幸运。