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