一笔采购订单进入审批流程时,系统可能要读取订单行、计算金额、匹配审批规则,再把候选审批人交给下一步处理。这些中间结果并不都值得写入正式业务表。有些只在一次计算中出现,有些需要在同一数据库会话的几次操作之间保留,还有些数据虽然只是临时数据,却必须使用一张预先定义好结构的表。在 SAP HANA 中,这几种需求分别对应表变量、临时表,以及少数需要特别处理的持久数据库对象。它们的区别不只是数据保留多久,还涉及优化器能否改写计算、不同会话能否看到表结构、并发调用是否相互干扰。选错对象,代码表面上仍能运行,却可能留下多余的表、意外共享的状态,或者难以解释的性能问题。一次计算中的中间结果,优先考虑表变量SQLScript 表变量适合表达过程内部的数据流。我们可以把它理解为给一段查询结果起了名字,让后面的语句能够清楚地引用它。例如,审批计算要从订单行中筛出金额超过门槛的项目,再按订单汇总。把筛选结果命名为lt_candidates,代码的业务意图便容易辨认。这里有一个容易产生误解的地方。表变量在代码里出现,并不保证执行时一定会生成一张独立的内部表。SAP HANA 会分析语句之间的数据依赖,并可能把查询合并、改写或安排在适当的位置执行。某个表变量代表的是逻辑上的表格结果,实际是否物化,要看具体语句和优化情况。因此,不能仅凭代码中写了几个表变量,就认定系统一定复制了几份完整数据。反过来,也不能承诺表变量永远不占用中间存储。下面用一个可独立阅读的简化片段说明数据流。示例中的两行数据代表待分析的订单行,重点是表变量之间如何衔接。