Uw code verandert nooit de multiplevalues
reeks. Het verandert gewoon elk element en gooit vervolgens die nieuwe waarde weg.
U hebt een variabele nodig waarin u uw resultaten kunt samenvoegen tot:
CREATE OR REPLACE FUNCTION manipulate_array(multiplevalues text[])
RETURNS text[] AS
$BODY$
DECLARE
singlevalue text;
l_result text[] := '{}'::text[]; -- initialize with an empty array
BEGIN
FOREACH singlevalue IN ARRAY multiplevalues LOOP
SELECT trim(regexp_replace(singlevalue, '\s+', ' ', 'g')) INTO singlevalue;
l_result := l_result || singlevalue; -- append to the result
END LOOP;
RETURN l_result; -- return the new array, not the old one
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
Maar dit kan een beetje eenvoudiger worden gedaan met behulp van een unnest en array_agg en een gewone SQL-functie (in plaats van PL/pgSQL)
U moet eerst de array uit elkaar halen, de waarden inkorten en deze samenvoegen tot een array.
Ik weet niet zeker of ik begrijp wat je probeert te doen, maar hierdoor worden alle waarden in de array bijgesneden en wordt een nieuwe geretourneerd:
create function trim_all(p_values text[])
returns text[]
as
$$
select array_agg(trim(regexp_replace(t.v, '\s+', ' ', 'g')) order by t.nr)
from unnest(p_values) with ordinality as t(v, nr);
$$
language sql;