sql >> Base de Datos >  >> RDS >> PostgreSQL

Rellenar matriz multidimensional

Postgres tiene una función dedicada exactamente para ese propósito:array_fill() :

Úsalo:

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;

Notas

  • Dimensiones de matriz en numeric[7][24] son solo documentación. El manual:
  • Sobre el operador de asignación en plpgsql::= o = :

  • Por lo general, no es posible escribir en un elemento de matriz directamente. Puede concatenar o añadir/anteponer elementos. O asigne una matriz como un todo. Detalles en el manual. Pero una afirmación como esta no es posible :

    tarifas[%][%] = 0
  • El límite inferior predeterminado de una matriz es 1, no 0. Pero puede definir una dimensión de matriz arbitraria. Ejemplo:

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