PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Preencher array multidimensional


O Postgres tem uma função dedicada exatamente para esse propósito:array_fill() :

Use-o:
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;

Observações

  • Dimensões da matriz em numeric[7][24] são apenas documentação. O manual:

  • Sobre o operador de atribuição no plpgsql::= ou = :

  • Geralmente não é possível gravar diretamente em um elemento de matriz. Você pode concatenar ou anexar / anexar elementos. Ou atribua uma matriz como um todo. Detalhes no manual. Mas uma declaração como esta não é possível :
    tarifas[%][%] = 0

  • O limite inferior padrão de uma matriz é 1, não 0. Mas você pode definir uma dimensão de matriz arbitrária. Exemplo:
    SELECT '[2:3][2:4]={{7,7,7},{7,7,7}}'::int[]