Kode Anda tidak pernah mengubah multiplevalues
Himpunan. Itu hanya mengubah setiap elemen, lalu membuang nilai baru itu.
Anda memerlukan variabel tempat Anda dapat menggabungkan hasil menjadi:
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;
Tapi ini bisa dilakukan sedikit lebih sederhana menggunakan unnest dan array_agg dan fungsi SQL biasa (bukan PL/pgSQL)
Anda harus terlebih dahulu menghapus sarang array, memangkas nilai dan agregat yang kembali ke dalam array.
Saya tidak yakin saya mengerti apa yang Anda coba lakukan, tetapi ini akan memangkas semua nilai di dalam array dan mengembalikan yang baru:
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;