如何在 postgresql 中循环遍历 string[]?

How to loop through string[] in postgresql?

在这个 postgressql 函数中,我通过拆分字符串创建了一个数组。现在我想循环这个数组并对其进行一些处理。

函数:

CREATE OR REPLACE FUNCTION getAllFoo() RETURNS character varying as
$BODY$
DECLARE
   arr_split_data text[];
   counter character varying;
begin

    counter := ''; -- Init value

    -- split data. Add in array
    select into arr_split_data regexp_split_to_array('a,b,c,d,e,f',',');

    FOR r IN arr_split_data -- error
    LOOP
         counter := arr_split_data[r] || '_' || counter; -- do some processing
    END LOOP;

  return counter;
END
$BODY$
LANGUAGE 'plpgsql';

但是我收到这个错误

当我执行这个函数的时候。我的循环语法有误吗?

语法是

FOREACH r IN ARRAY arr_split_data
LOOP
  counter := r || '_' || counter;
  -- do some processing
END LOOP;

您还需要声明 r

DECLARE
    arr_split_data TEXT [];
    r              CHARACTER VARYING;
    counter        CHARACTER VARYING;
BEGIN

参见手册第 41.6.5 节:Looping Through Arrays

    CREATE OR REPLACE FUNCTION getAllFoo() RETURNS character varying as
    $BODY$
    DECLARE
        r               character varying;    
        arr_split_data  text[];
        counter         character varying;
    begin
        counter := ''; -- Init value

        -- split data. Add in array
        select into arr_split_data regexp_split_to_array('a,b,c,d,e,f',',');

        FOREACH r IN array arr_split_data LOOP
            counter := counter || '_' || r; -- do some processing
        END LOOP;
        return counter;

    END
    $BODY$
    LANGUAGE 'plpgsql';