【发布时间】:2018-03-22 00:51:54
【问题描述】:
如果 Postgres 允许分配 ARRAY 记录属性,如果有人可以指导,将不胜感激。例如 - 虚拟设置。
尝试更新记录的属性(数组的一部分)。 直接分配不起作用。必须创建一种迂回的方式来创建额外的记录、分配和交换。
create table dummy_array (id numeric, descr varchar(100));
insert into dummy_array values(1,'TEST1'),(2,'TEST2');
select * from dummy_array;
do
$function$
declare
v_array dummy_array[];
v_dummy_rec dummy_array;
begin
v_array=array(select ROW(id,descr) from dummy_array);
raise notice '%',v_array[1].descr;
--FOLLOWING DIRECT ASSIGNMENT DOES NOT WORK
v_array[1].descr :='ZZZ';--This assignment errors out
end ;
$function$
Errors out with SQL ERROR[42601]:ERROR:syntax error at or near "."
Tried even (v_array[1]).descr :='ZZZ'; does not work
Following Works but a hack create temp, copy,assign ,modify reassing
do
$function$
declare
v_array dummy_array[];
v_dummy_rec dummy_array;
begin
v_array=array(select ROW(id,descr) from dummy_array);
raise notice '%',v_array[1].descr;
**--v_array[1].descr :='ZZZ';--This assignment errors out**
v_dummy_rec :=v_array[1];
v_dummy_rec.descr :='ZZZ';
v_array[1]:=v_dummy_rec;
raise notice '%',v_array[1].descr;
end ;
$function$
如果可以进行如上所示的直接作业,请指导我
**v_array[1].descr :='ZZZ';--This assignment errors out**
【问题讨论】: