我在 Oracle 中有一个查询,需要:
按特定列对整个表进行排序。使用 SELECT FOR UPDATE 选择并锁定一定数量的行。但是,问题是 Oracle 首先以任意顺序选择行,然后仅对所选子集应用 ORDER BY。这导致最终排序在选择之后应用,而不是在选择之前应用。
我尝试的方法由于 FETCH 不适用于 SELECT FOR UPDATE,我使用 ROWNUM 来限制行数。但是,排序仍然在行选择之后应用,而不是之前。预期行为我希望查询首先对整个表进行排序,然后按该顺序选择并锁定前 N 行。
实际行为查询任意选择 N 行,然后仅对这些行应用 ORDER BY。
注意:通用表表达式 (CTE) 和内联查询不适用于 SELECT FOR UPDATE,因此我无法使用它们来强制选择之前的排序。
如何确保在仍然使用 SELECT FOR UPDATE 的情况下对整个表进行排序之后进行选择?
如有任何建议或解决方法,我们将不胜感激!