在 SAP HANA 的 SQLScript 开发中,我们经常需要处理一种特殊的数据结构,业务数据已经存在于多个数组或表变量中,但后续的 SQL 查询、关联操作或者存储过程输出,需要的是一张具有明确行列结构的关系表。
以销售订单批量处理为例,我们可能已经获得两个数组,一个保存销售订单编号,另一个保存订单对应的金额。两个数组中的元素按照相同的位置排列,订单编号数组的第一个元素对应金额数组的第一个元素,第二个元素也遵循相同的对应关系。
如果继续使用数组处理,程序需要通过下标分别读取两个数组的元素,并自行维护数据之间的对应关系。当业务要求进一步关联销售订单主数据、计算汇总金额或者将结果作为存储过程的表类型输出参数时,直接操作数组就不够方便了。
SAP HANA 提供的 UNNEST 函数能够解决这一问题。它可以将一个或多个数组转换为表,也可以按照元素位置合并多个表变量,最终生成可以继续参与 SQLScript 数据处理的表变量。
不过,UNNEST 并不只是简单地将数组转换为表。多个输入对象的长度不同时,返回结果如何处理缺失位置,表变量的列名发生冲突时怎样重命名,WITH ORDINALITY 生成的序号究竟代表什么,以及 NOT NULL 约束为什么可能引发运行时错误,都是实际开发中需要理解的问题。
这些细节直接关系到程序的正确性,尤其是在批量订单处理、接口数据转换以及复杂存储过程的数据流处理中,不能仅凭函数名称推断其行为。
从 SQLScript 的数据模型来看,数组与表变量承担着不同的角色。数组更适合按照位置访问单个元素,表变量则更适合使用 SQL 对多行数据进行筛选、投




