You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用LOOP替代UNION ALL解析JSON数组元素至行的问题

替代多次UNION ALL解析JSON数组的方案

直接用PostgreSQL内置的json_array_elements函数即可一次性展开JSON数组,无需重复写UNION ALL或手动循环,代码简洁且高效:

SELECT
  e.id AS execution_entry_id,
  account AS account_json,
  account->>'startBalance' AS startBalance,
  account->>'endBalance' AS endBalance
FROM stage_cz.cb_data_execution_entry e
LEFT JOIN stage_cz.cb_data_execution_entry_details d
  ON d.execution_entry_id = e.id
LEFT JOIN LATERAL json_array_elements((e.response_body::json)->'statements') AS account
  ON true
WHERE provider_name = 'sokordiatech'
  AND account IS NOT NULL;

你的LOOP代码报错原因

PL/pgSQL块中直接执行SELECT但未指定结果的接收目标(比如INTO变量或返回结果集),PostgreSQL无法处理查询结果,因此抛出query has no destination for result data错误。即便改成PERFORM也只是丢弃结果,无法合并循环结果返回,这种方式完全没必要。

方案优势

  • 无需手动编写多次重复的UNION ALL代码,避免遗漏数组元素
  • json_array_elements自动遍历JSON数组的所有元素,适配任意长度的数组
  • 使用->>运算符直接获取不带引号的文本值,省去trim和类型转换的冗余操作

内容的提问来源于stack exchange,提问作者Lukáš Horník

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 15:40:27