Oracle SQL中FOR UPDATE SKIP LOCKED与ORDER BY结合报错求助
解决Oracle SQL中ORDER BY与FOR UPDATE SKIP LOCKED共存的问题
你可以通过子查询嵌套的方式绕开这个限制,先在内层完成排序和取行操作,再在外层对结果行加锁。具体写法如下:
SELECT t.* FROM ( SELECT * FROM "myschema"."mytable" ORDER BY "mycolumn" FETCH FIRST 1 ROWS ONLY ) t FOR UPDATE SKIP LOCKED;
逻辑说明
内层子查询先执行排序(ORDER BY "mycolumn")并筛选出第一行数据,外层查询针对这个已经确定的结果集执行锁定操作,既满足了你的排序取行需求,也符合Oracle对FOR UPDATE语句的使用规则。
这样写就能实现你想要的“按指定列排序后取首行,锁定该行且跳过已被锁定行”的效果。
内容的提问来源于stack exchange,提问作者FoxDawg
相关产品推荐
相关产品推荐

