Все наверно или сталкивались, или столкнуться с проблемой разбиения массива ARRAY[anyelment], anyelment, …] на строки.
Вот рабочая процедура для postgresql:
1 2 3 4 5 6 7 8 9 10 11 | CREATE OR REPLACE FUNCTION unpack(anyarray) RETURNS SETOF anyelement AS $BODY$ SELECT $1[i] FROM generate_series(array_lower($1,1), array_upper($1,1)) g(i); $BODY$ LANGUAGE SQL IMMUTABLE STRICT COST 100 ROWS 1000; ALTER FUNCTION unpack(anyarray) OWNER TO postgres; |
Вот рабочий кусок кода с использованием этой процедуры:
1 2 3 4 5 6 | SELECT (CASE WHEN "pp"."uniqueUrlAnchorId" IS NOT NULL THEN "pp"."uniqueUrlAnchorId" ELSE "global"."insertUrlAnchor"("t"."anchor") END) AS "uniqueUrlAnchorId", "t"."anchor" FROM (SELECT unpack(tmpAnchorArray)) AS "t"("anchor") LEFT JOIN "global"."uniqueUrlAnchors" AS "pp" ON ("pp"."anchor")::text = ("t"."anchor")::text |
tmpAnchorArray в моём случает определён как text[];
Как видим ща сложностью окружающих конструкций использование unpack довольно прозрачно и просто. Удачи!
Похожие статьи:


0 Comments.