课程章节介绍
同学们,咱们今天来聊聊 Apex 里一个非常实用但容易被忽略的工具——,指针,,英文叫 Cursor。
你可以把指针想象成一个在事务内部、帮你分批次读取大量数据的小助手。以前我们处理海量数据,可能要依赖 Batch Apex,但现在有了指针,很多时候你可以在一个事务里,用更灵活的方式完成类似的工作,而且它是无状态的。
那“无状态”是什么意思呢?就是说服务器不会帮你记住读到哪里了,你得自己在代码里跟踪这个“偏移位置”。你通过 `Database.getCursor` 方法,传入一条 SOQL 查询,就能创建出一个指针。然后,想取数据的时候,就调用 `fetch` 方法,告诉它“从第几行开始、取多少条记录”,它就把那一批结果返回给你。
需要注意,指针的结果集是它创建那一刻的快照,之后数据再怎么变,都不会影响你已经打开的这个指针。另外它也有容量和调用次数的上限:最多能处理五千万行记录,而且在一个事务里,调用 `fetch` 不能超过 100 次。
如果你需要更方便的翻页,还可以用 `fetchPage` 方法。它会返回一个叫 `CursorFetchResponse` 的对象,里面不止有获取到的记录列表,还包括被删除掉的行数、下一个读取索引,以及一个布尔值告诉你是不是已经全部读完了。这样循环处理大结果集时就更直观。
同时,指针的用量也是受限制监控的,你可以通过 `Limits` 类的方法,或者 `OrgLimits` 里的每日限额地图来跟踪使用情况。
实际项目中,把指针和 Queueable Apex 结合起来,就能做成一种很强大的批处理方案。比如用 Queueable 作业链起来,每次 `fetch` 一小批记录去处理,不但避开了 Batch Apex 每次只能处理 200 条的局限,整体执行也更快、更可控。可以说,它是 Batch Apex 的一种优雅替代。掌握了指针,你就多了一把高效处理大数据的利器。
关键词
Apex
Salesforce
Developer Guide