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

PostgreSQL对row_to_json结果嵌套循环报42601语法错误如何解决

问题原因&解决方案

1. 语法错误根因

PL/pgSQL的块结构要求:所有变量声明(DECLARE段)必须对应一个BEGIN ... END代码段,你在第一层循环内部声明orgs、j变量之后,没有写BEGIN就直接写内层FOR循环,直接触发语法报错。

2. 额外逻辑问题修正

你当前写的row_to_json(t)仅能获取查询结果的第一行数据生成JSON对象,如果你需要遍历my_table中所有符合条件的parent_id,需要修改为用jsonb_agg聚合所有结果为JSON数组,再用jsonb_array_elements遍历数组元素,避免遗漏数据。

修正后可运行代码

如果需要处理查询返回的多行结果,使用以下版本:

DO
$BODY$
DECLARE
    js jsonb := '{"ddd525b9-e47c-46ac-ab55-e0db93338ff3": "ddd525b9-e47c-46ac-ab55-e0db93338ff4", "550e8400-e29b-41d4-a716-446655440000": "e15c6fe3-000c-4c69-9c41-9e241323cbe5", "0ba26163-bf75-40d2-8526-172229604d95": "7ed83dbc-3895-490c-8a16-9842cfe85e28"}';
    i record;
BEGIN
  FOR i IN SELECT * FROM jsonb_each_text(js)
  LOOP
    -- 嵌套块必须遵循DECLARE + BEGIN/END的结构
    DECLARE
      orgs jsonb := (SELECT jsonb_agg(row_to_json(t)) FROM (SELECT parent_id FROM my_schema.my_table o WHERE o.id != i.value) t);
      j jsonb;
    BEGIN
      FOR j IN SELECT * FROM jsonb_array_elements(orgs)
      LOOP
        RAISE NOTICE 'key parent_id';
        RAISE NOTICE 'value %', j->>'parent_id';
      END LOOP;
    END;
  END LOOP;
END;
$BODY$;

如果仅需要处理单行查询结果,只修复语法问题可以使用以下简化版本:

DO
$BODY$
DECLARE
    js jsonb := '{"ddd525b9-e47c-46ac-ab55-e0db93338ff3": "ddd525b9-e47c-46ac-ab55-e0db93338ff4", "550e8400-e29b-41d4-a716-446655440000": "e15c6fe3-000c-4c69-9c41-9e241323cbe5", "0ba26163-bf75-40d2-8526-172229604d95": "7ed83dbc-3895-490c-8a16-9842cfe85e28"}';
    i record;
BEGIN
  FOR i IN SELECT * FROM jsonb_each_text(js)
  LOOP
    DECLARE
      orgs jsonb := (SELECT row_to_json(t) FROM (SELECT parent_id FROM my_schema.my_table o WHERE o.id != i.value LIMIT 1) t);
      j record;
    BEGIN
      FOR j IN SELECT * FROM jsonb_each_text(orgs)
      LOOP
        RAISE NOTICE 'key %', j.key;
        RAISE NOTICE 'value %', j.value;
      END LOOP;
    END;
  END LOOP;
END;
$BODY$;

内容的提问来源于stack exchange,提问作者Sujeet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:39:03