Cle*_*ida 2 arrays postgresql plpgsql multidimensional-array
我正在尝试在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;
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
numeric[7][24]只是文档.引用手册:当前实现也不强制声明的维数.无论尺寸大小或数量如何,特定元素类型的数组都被认为是相同类型的.因此,声明数组大小或维数
CREATE TABLE是简单的文档; 它不会影响运行时行为.
通常不可能直接写入数组元素.您可以连接或追加/前置元素.或者将数组作为一个整体分配.手册中的详细信息.但是这样的声明是不可能的:
tarifas[%][%] = 0Run Code Online (Sandbox Code Playgroud)数组的默认下限是1,而不是0.但是您可以定义任意数组维.例:
SELECT '[2:3][2:4]={{7,7,7},{7,7,7}}'::int[]
Run Code Online (Sandbox Code Playgroud)