Вот функция, показывающая несколько способов доступа к многомерным массивам. Один из них просто перебирает массив с помощью слайса, что является самым простым способом - переменная c
просто существует, поэтому я могу напечатать «внешний» индекс, он совсем не нужен.
Другой способ напрямую получить доступ к значениям. Однако я не знаю, как получить каждый «подмассив» через индексный доступ - например, ar[2:2]
возвращает {{values}}
, (ar[2:2])[1]
возвращает NULL, а (ar[2:2])[1][1]
возвращает значение элемента в подмассиве с этим индексом - средний, возвращающий NULL, - это то, чего я не получаю. Если бы вы могли получить его, то вы могли бы использовать ARRAY_UPPER
для динамического доступа ко всем значениям без использования FOREACH / SLICE.
Также обратите внимание, я не объявляю TEXT[][]
- это не имеет значения.
CREATE OR REPLACE FUNCTION public.f1(ar TEXT[])
RETURNS VOID AS
$BODY$
DECLARE
_ar TEXT[];
c INTEGER := 0;
BEGIN
FOREACH _ar SLICE 1 IN ARRAY ar LOOP
c := c + 1;
FOR i IN 1..ARRAY_UPPER(_ar, 1) LOOP
RAISE NOTICE '%.%: %', c, i, _ar[i];
END LOOP;
END LOOP;
RAISE NOTICE 'Alternative: %, %', (ar[2:2])[1][1], (ar[2:2])[1][2];
END
$BODY$
LANGUAGE plpgsql IMMUTABLE;
Звоните:
SELECT * FROM public.f1(ARRAY[['1011','Unit 102, 100 Wester highway, Paramataa'],['1012','+61426999888']]);
Печать:
NOTICE: 1.1: 1011
NOTICE: 1.2: Unit 102, 100 Wester highway, Paramataa
NOTICE: 2.1: 1012
NOTICE: 2.2: +61426999888
NOTICE: Alternative: 1012, +61426999888