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

PostgreSQL中FOREACH语句参数附近语法错误排查求助

问题解决方案

错误根源

你遇到的语法错误是因为PostgreSQL中使用FOREACH遍历数组时,必须显式使用IN ARRAY子句,原始代码漏掉了ARRAY关键字,导致SQL解析失败。

修正后的PL/pgSQL函数

以下是修复后的函数代码:

CREATE OR REPLACE FUNCTION AddSkFromList(p_Attr "Cyberpunk2020"."Attr", p_SkList text[]) RETURNS void AS $$
DECLARE
    v_SkName text;
BEGIN
    FOREACH v_SkName IN ARRAY p_SkList LOOP
        INSERT INTO "Cyberpunk2020"."Skills" ("Attribute", "Name")
        VALUES (p_Attr, v_SkName);
    END LOOP;
END;
$$ LANGUAGE plpgsql;

更高效的批量插入方案

对于批量插入场景,使用集合操作替代PL/pgSQL循环性能更优,推荐用UNNEST展开数组直接插入,避免循环开销:

PL/pgSQL版本

CREATE OR REPLACE FUNCTION AddSkFromList(p_Attr "Cyberpunk2020"."Attr", p_SkList text[]) RETURNS void AS $$
BEGIN
    INSERT INTO "Cyberpunk2020"."Skills" ("Attribute", "Name")
    SELECT p_Attr, sk_name
    FROM UNNEST(p_SkList) AS sk_name;
END;
$$ LANGUAGE plpgsql;

纯SQL版本(更简洁)

CREATE OR REPLACE FUNCTION AddSkFromList(p_Attr "Cyberpunk2020"."Attr", p_SkList text[]) RETURNS void AS $$
    INSERT INTO "Cyberpunk2020"."Skills" ("Attribute", "Name")
    SELECT p_Attr, unnest(p_SkList);
$$ LANGUAGE sql;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:06:33