Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 填充多维数组_Arrays_Postgresql_Multidimensional Array_Plpgsql - Fatal编程技术网

Arrays 填充多维数组

Arrays 填充多维数组,arrays,postgresql,multidimensional-array,plpgsql,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;

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

Postgres有一个专门用于此目的的功能:

返回使用提供的值和维度初始化的数组, 可选择使用除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]
    中的数组维度只是文档
当前实现不强制执行声明的数量 尺寸也是。特定元素类型的数组都是 被认为是同一类型的,无论大小或数量 尺寸。因此,在
创建表
只是一个文档;它不影响运行时行为

  • 关于plpgsql中的赋值运算符:
    :=
    =

  • 通常不可能直接写入数组元素。您可以连接或附加/前置元素。或者将数组作为一个整体分配。但这样的说法是不可能的:

tarifas[%][%] = 0
SELECT '[2:3][2:4]={{7,7,7},{7,7,7}}'::int[]