如何在PostgreSQL中循环遍历字符串数组?

5
在这个PostgreSQL函数中,我通过分割一个字符串创建了一个数组。现在我想循环遍历这个数组,并对其进行一些处理。
函数如下:
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';

但是我遇到了这个错误:

error

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

2个回答

10
语法是:

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节:循环数组

不起作用。错误 - FOREACH 的循环变量必须是已知变量或变量列表 - Deepak gupta
3
@Deepakgupta: 然后声明变量r - user330315

5
    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';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接