PL/pgSQL中给复合类型数组元素的列赋值报错,求解决方案
解决PostgreSQL复合类型数组元素字段赋值的语法错误
PostgreSQL不允许直接通过数组[索引].字段名的方式修改复合类型数组元素的内部字段,这就是你遇到语法错误的核心原因。正确的做法是先将数组中的目标元素提取到临时变量中,修改变量的字段后再将其放回数组。
修正后的函数代码如下:
CREATE OR REPLACE FUNCTION fnc_test() RETURNS integer AS $$ declare tb_var dba_reports[]; v_serialno int := 1; -- 声明临时变量,类型与复合类型数组的元素一致 temp_row dba_reports; begin SELECT array_agg(tbl) into tb_var FROM "dba_reports" tbl; RAISE NOTICE '%', tb_var[v_serialno].report_id; -- 1. 将数组元素提取到临时变量 temp_row := tb_var[v_serialno]; -- 2. 修改临时变量的字段值 temp_row.report_id := 99; -- 3. 将修改后的变量放回数组 tb_var[v_serialno] := temp_row; return 1; end; $$ language plpgsql;
另外补充:你原代码中tb_var[v_serialno].report_id :=99末尾缺少分号,但这不是导致当前语法错误的关键原因,核心限制还是复合类型数组元素的字段无法直接修改。
内容的提问来源于stack exchange,提问作者Serhad Erdem
相关产品推荐
相关产品推荐

