我尝试在PostgreSQL上填充多维数组,但它不起作用。在我的代码下面:
CREATE OR REPLACE FUNCTION teste()
RETURNS void AS
$BODY$
DECLARE
tarifas NUMERIC[7][24];
a INTEGER;
b INTEGER;
BEGIN
FOR a IN 0..6 LOOP
RAISE NOTICE 'TESTE TESTE %', a;
FOR b IN 0..23 LOOP
RAISE NOTICE 'tarifas[%][%] = 0;', a, b;
tarifas[a][b] = 0;
END LOOP;
END LOOP;
END
$BODY$
LANGUAGE plpgsql VOLATILE;
答案 0 :(得分:5)
Postgres具有专门用于此目的的功能:array_fill()
:
返回一个用提供的值和尺寸初始化的数组, 任选地具有除1之外的下限
使用它:
CREATE OR REPLACE FUNCTION teste()
RETURNS void AS
$func$
DECLARE
tarifas numeric[7][24] := array_fill(0, ARRAY[7,24]);
a int;
b int;
BEGIN
-- do something
END
$func$ LANGUAGE plpgsql;
numeric[7][24]
中的数组维度只是文档。 The manual: 当前实现不强制声明的数量 尺寸要么。特定元素类型的数组都是 被认为属于同一类型,无论大小或数量 尺寸。因此,声明数组的大小或维数
CREATE TABLE
只是文档;它不会影响运行时行为。
关于plpgsql中的赋值运算符: :=
或=
:
通常无法直接写入数组元素。您可以连接或追加/前置元素。或者将数组作为一个整体分配。 Details in the manual.但是这样的陈述不可能:
tarifas[%][%] = 0
数组的默认下限为1,而不是0.但您可以定义任意数组维。例如:
SELECT '[2:3][2:4]={{7,7,7},{7,7,7}}'::int[]