我想在pgAdmin中编写一个基于postgresql的postgis代码。它定义了一个三维几何数组。
我使用了这段代码:
DECLARE
G geometry[9][9][9];
BEGIN
for i IN 1..9 LOOP
for j IN 1..9 LOOP
for k IN 1..9 LOOP
G[i][j][k] := [value that I want];
END LOOP;
END LOOP;
END LOOP;
但它返回了这个错误:
"array subscript out of range"
我改为使用了这个:
DECLARE
G geometry[9][9][9];
BEGIN
for i IN array_lower(G, 1)..array_upper(G, 1) LOOP
for j IN array_lower(G, 1)..array_upper(G, 1) LOOP
for k IN array_lower(G, 1)..array_upper(G, 1) LOOP
G[i][j][k] := [value that I want];
END LOOP;
END LOOP;
END LOOP;
这次我有一个不同的错误:
"lower bound of FOR loop cannot be null"
我在BEGIN Part中使用了它并解决了所有错误:
G[1][1][1] := '01010000200400000000000000000000000000000000000000';
但我认为这不是真的,也不会计算循环的所有迭代。我认为这只考虑了G [1] [1] [1]。我现在该怎么办?
答案 0 :(得分:2)
在PostgreSQL中,简单地声明数组维度不会初始化或预先分配任何内容。该阵列的所有维度都是动态的。这与通用编程语言(如C
。
为了模仿这些语言的逻辑,你可以先用这样的语句初始化9x9x9数组:
G:=array_fill('point(0 0)'::geometry, array[9,9,9]);
然后,当引用G[i][j][k]
作为分配的来源或目的地时,其余代码将正常工作。