Mã của bạn không bao giờ thay đổi multiplevalues
mảng. Nó chỉ thay đổi từng phần tử, sau đó ném giá trị mới đó đi.
Bạn cần một biến để có thể tổng hợp kết quả của mình thành:
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;
Nhưng điều này có thể được thực hiện đơn giản hơn một chút bằng cách sử dụng unnest và array_agg và một hàm SQL thuần túy (thay vì sau đó là PL / pgSQL)
Trước tiên, bạn cần giải phóng mảng, cắt các giá trị và tổng hợp lại thành một mảng.
Tôi không chắc mình hiểu bạn đang cố gắng làm gì, nhưng điều này sẽ cắt tất cả các giá trị bên trong mảng và trả về một giá trị mới:
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;