填充多维数组

时间:2014-03-14 15:06:08

标签: arrays postgresql multidimensional-array plpgsql

我尝试在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;

1 个答案:

答案 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[]