oracle 函数里的双循环用法,写起来不复杂,但执行效率可就差挺多了。用双游标单游标+分组嵌套游标三种写法去批量数据,逻辑上都能跑,但执行时间一比较,区别就出来了。

双游标的方式比较直接,内外层都开一个FOR CURSOR,可读性强,不过大数据量时,性能不是友好。是内层游标每次都重新打开,数据库会哭的。

游标加分组的写法就灵巧多。通过GROUP BY提前把数据按业务逻辑分好,再循环,少了不少无效扫描。执行时间也少一大截。你可以参考这篇优化 Oracle 性能提升运行速度的文章,讲得还蛮清楚。

还有一种嵌套查询里的游标写法,也挺常见,但建议谨慎用,尤其你的是上万行的大表。慢是真的慢。调试起来也比较麻烦。

,想效率高,优先考虑带分组的写法。如果你刚好在做统计类的数据,或者批量更新之类的场景,这个思路蛮值得试试。对了,游标相关操作还有一篇可以参考的:游标执行删除查询统计操作的动态 SQL 语句,里面有一些动态 SQL 的细节也不错。

如果你正在写PL/SQL,碰到逻辑老是卡顿,可以试着从游标结构下手,优化一下思路,说不定就通了。