Jak zauważył Chris, w PostgreSQL nie ma problemu - każdy typ bazy (np. Int, text) ma własną podtyp macierzy, a także można tworzyć typy niestandardowe, w tym złożone.Na przykład:
CREATE TYPE test as (
n int4,
m int4
);
Teraz można łatwo utworzyć tablicę testu:
select ARRAY[
row(1,2)::test,
row(3,4)::test,
row(5,6)::test
];
można napisać funkcję, która będzie pomnożyć n * m dla każdego elementu w tablicy i zwraca sumę iloczynów:
CREATE OR REPLACE FUNCTION test_test(IN work_array test[]) RETURNS INT4 as $$
DECLARE
i INT4;
result INT4 := 0;
BEGIN
FOR i IN SELECT generate_subscripts(work_array, 1) LOOP
result := result + work_array[i].n * work_array[i].m;
END LOOP;
RETURN result;
END;
$$ language plpgsql;
i uruchom go:
# SELECT test_test(
ARRAY[
row(1, 2)::test,
row(3,4)::test,
row(5,6)::test
]
);
test_test
-----------
44
(1 row)
Począwszy od SQL Server 2008, można w rzeczywistości używać zmiennych tabeli jako parametrów procedury przechowywanej. – Thorarin