私は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 行を保持し、選択の順序を保持して行をロックしたいと考えています。
それを行う方法はありますか?