【发布时间】:2020-05-03 07:50:09
【问题描述】:
我正在尝试填充二维数组
do $$
declare pole text[][];
begin
for y in 1..6
loop
for x in 1..4
loop
pole[y][x] = '0';
raise notice 'x: %',x;
raise notice 'y: %',y;
end loop;
end loop;
/*
pole := '{
{0,0,0,0},
{7,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0}
}';
*/
raise notice 'pole : %', pole;
raise notice 'pole one: %', pole[2][1];
end $$
但是得到ERROR: array subscript out of range,如果我像pole[6][4] := '0' 那样手动填充数组没有问题,但是一旦使用循环我就会出错,我不知道为什么,变量介于 1 和 4 以及 1 和 6 之间,并且手动分配有效。这是基本的编程我错过了什么吗?
1) SQL State: 00000 --- x: 1
2) SQL State: 00000 --- y: 1
3) SQL State: 00000 --- x: 2
4) SQL State: 00000 --- y: 1
5) SQL State: 00000 --- x: 3
6) SQL State: 00000 --- y: 1
7) SQL State: 00000 --- x: 4
8) SQL State: 00000 --- y: 1
9) SQL State: 00000 --- x: 1
10) SQL State: 00000 --- y: 2
11) SQL State: 00000 --- x: 2
12) SQL State: 00000 --- y: 2
13) SQL State: 00000 --- x: 3
14) SQL State: 00000 --- y: 2
15) SQL State: 00000 --- x: 4
16) SQL State: 00000 --- y: 2
17) SQL State: 00000 --- x: 1
18) SQL State: 00000 --- y: 3
19) SQL State: 00000 --- x: 2
20) SQL State: 00000 --- y: 3
21) SQL State: 00000 --- x: 3
22) SQL State: 00000 --- y: 3
23) SQL State: 00000 --- x: 4
24) SQL State: 00000 --- y: 3
25) SQL State: 00000 --- x: 1
26) SQL State: 00000 --- y: 4
27) SQL State: 00000 --- x: 2
28) SQL State: 00000 --- y: 4
29) SQL State: 00000 --- x: 3
30) SQL State: 00000 --- y: 4
31) SQL State: 00000 --- x: 4
32) SQL State: 00000 --- y: 4
33) SQL State: 00000 --- x: 1
34) SQL State: 00000 --- y: 5
35) SQL State: 00000 --- x: 2
36) SQL State: 00000 --- y: 5
37) SQL State: 00000 --- x: 3
38) SQL State: 00000 --- y: 5
39) SQL State: 00000 --- x: 4
40) SQL State: 00000 --- y: 5
41) SQL State: 00000 --- x: 1
42) SQL State: 00000 --- y: 6
43) SQL State: 00000 --- x: 2
44) SQL State: 00000 --- y: 6
45) SQL State: 00000 --- x: 3
46) SQL State: 00000 --- y: 6
47) SQL State: 00000 --- x: 4
48) SQL State: 00000 --- y: 6
x86_64-pc-linux-gnu 上的 PostgreSQL 11.6,由 gcc (GCC) 4.8.5 编译 20150623(红帽 4.8.5-39),64 位
【问题讨论】:
-
你能试试
for y in 1..array_length(pole,1) loop吗? -
是的,结果是“[代码:0,SQL 状态:22004] 错误:FOR 循环的上限不能为空 Kde:PL/pgSQL 函数 inline_code_block 在 FOR 的第 6 行,带有整数循环变量”
标签: arrays postgresql loops