如何在postgresql中循环字符串[]?
Posted
技术标签:
【中文标题】如何在postgresql中循环字符串[]?【英文标题】:How to loop through string[] in postgresql? 【发布时间】:2017-01-21 07:03:22 【问题描述】:在这个 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';
但是我收到了这个错误
当我执行这个函数时。我的 for 循环语法错了吗?
【问题讨论】:
【参考方案1】:语法是
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
【讨论】:
不工作。错误 - FOREACH 的循环变量必须是已知变量或变量列表 @Deepakgupta: 然后声明变量r
【参考方案2】:
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';
【讨论】:
以上是关于如何在postgresql中循环字符串[]?的主要内容,如果未能解决你的问题,请参考以下文章