1

私は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 ステートメントが必要な理由を説明しようと思います。

  • 最初の (内側の) 選択は、必要なデータを取得します
  • 2番目のものは、行数を数値に制限します(最初の選択には入れられません。オラクルは最初に結果を制限し、注文した後にのみ行うため、これは私が望むものではありません)
  • 3番目の(withの外側の)selectは順序を保持します(3つのネストされたselectを使用してみました-したがって、with句はありません-しかし、この場合、順序を保持する方法が見つかりません)。また、queue_requests テーブルの行をロックする必要がありますが、with 句からデータを選択したため、上記のエラーが発生します。

したがって、queue_requests からデータを選択し、最初の x 行を保持し、選択の順序を保持して行をロックしたいと考えています。

それを行う方法はありますか?

4

1 に答える 1