gpt4 book ai didi

sql - 在 postgres 中访问和修改多维数组

转载 作者:行者123 更新时间:2023-11-29 13:48:30 27 4
gpt4 key购买 nike

我不知道如何在 postgres 中更改多维数组。假设有以下代码:

do
$$
declare
a double precision[][];
x integer;
y integer;

begin
for x in 1..3 loop
for y in 1..3 loop
a[x y]:= x * y;
raise notice 'x: %, y: %, value: %, should be: %',x, y, a[x:y], x*y;
end loop;
end loop;
end
$$
language plpgsql;

结果如下:

x: 1, y: 1, value: {1}, should be: 1
x: 1, y: 2, value: {2}, should be: 2
x: 1, y: 3, value: {3}, should be: 3
x: 2, y: 1, value: {}, should be: 2
x: 2, y: 2, value: {4}, should be: 4
x: 2, y: 3, value: {6}, should be: 6
x: 3, y: 1, value: {}, should be: 3
x: 3, y: 2, value: {}, should be: 6
x: 3, y: 3, value: {9}, should be: 9

如您所见,存在一些问题。例如,x=2y=1 的组合导致 {}

通常我会认为我可以通过以下方式更改数组

a[x][y]:= value;

但这会产生错误。

最佳答案

您的示例操作一维数组 - 您可以使用 array_ndims(a) 检查它。或者只是 raise info '%',a;

改为尝试使用 a[x][y]:= value; 方法显式定义维度以避免错误,例如:

do
$$
declare
a double precision[][];
x integer;
y integer;

begin
a := array[[NULL,NULL,NULL],[NULL,NULL,NULL],[NULL,NULL,NULL]];
for x in 1..3 loop
for y in 1..3 loop
a[x][y]:= x * y;
raise notice 'x: %, y: %, value: %, should be: %',x, y, a[x][y], x*y;
end loop;
end loop;
raise info '%',a;
end
$$
language plpgsql;
NOTICE: x: 1, y: 1, value: 1, should be: 1
NOTICE: x: 1, y: 2, value: 2, should be: 2
NOTICE: x: 1, y: 3, value: 3, should be: 3
NOTICE: x: 2, y: 1, value: 2, should be: 2
NOTICE: x: 2, y: 2, value: 4, should be: 4
NOTICE: x: 2, y: 3, value: 6, should be: 6
NOTICE: x: 3, y: 1, value: 3, should be: 3
NOTICE: x: 3, y: 2, value: 6, should be: 6
NOTICE: x: 3, y: 3, value: 9, should be: 9
INFO: {{1,2,3},{2,4,6},{3,6,9}}
DO

另外请注意 - 我在 raise

中将冒号切片更改为精确索引

关于sql - 在 postgres 中访问和修改多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44530595/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com