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
相关产品推荐
相关产品推荐

