【发布时间】:2013-12-27 02:49:46
【问题描述】:
我的存储过程中有一个数字的 VARCHAR,这些数字被组织为数组,我将在下面展示一个示例:
{1,2,3,4,5,6,7,8,9},{1,2,3,4,5},{1,2,3},{9} -- This is a STRING
现在在另一个人的帮助下,我正在使用它来获取整数数组 integer[]
SELECT string_to_array(regexp_split_to_table(
trim('{1,2,3,4,5,6,7,8,9},{1,2,3,4,5},{1,2,3},{9}', '{}')
, '},{'), ',')::int[]
我会有一组记录,每条记录都有一个数组,见下图:
{1,2,3,4,5,6,7,8,9}
{1,2,3,4,5}
{1,2,3}
{9}
我正在尝试,但我不知道如何创建 FOR 来迭代这些数组中的每个元素,以调用另一个过程来处理每个数组中的每个元素。
我将调用my_array 的数组{1,2,3,4,5,6,7,8,9} 的示例:
rec record;
arr integer[];
FOR rec IN SELECT string_to_array(unnest(string_to_array(trim(text_nodes_for_connectivity, '{}'), '},{')), ',')::int[] LOOP
arr := array_cat(arr, rec);
END LOOP;
我收到此错误:
function array_cat(integer[], record) does not exist
我需要将我的每个记录结果转换为一个数组,所以我可以使用 array_cat 或其他函数来迭代数组元素
我的 proc 代码如下:
DROP FUNCTION IF EXISTS clustering_nodes();
CREATE OR REPLACE FUNCTION clustering_nodes() RETURNS integer[] AS $$
DECLARE
my_array integer[];
rec record;
arr integer[];
my_var varchar[500];
len integer;
BEGIN
my_var = '{1,2,3,4,5,6,7,8,9},{1,2,3,4,5},{1,2,3},{8}';
FOR rec IN SELECT string_to_array(unnest(string_to_array(trim(my_var, '{}'), '},{')), ',')::int[] LOOP
len = array_length(rec);
arr := array_append(arr, len);
END LOOP;
RETURN arr;
END;
$$ LANGUAGE 'plpgsql' STRICT;
select clustering_nodes();
提示还是技巧?
【问题讨论】:
-
嗯,你的
FOR循环看起来不错。我们需要更多来确定问题。错误消息,开始。包括标题在内的整个 pgsql 函数也会很棒。 -
我更新了我的问题,所以我想循环 SELECT 返回给我的每条记录,并将它们中的每一条作为一个独立的数组进行操作
-
The whole pgsql functionincluding the header以及函数调用。对您的问题至关重要。 -
附上我的 proc 代码!
标签: sql arrays postgresql plpgsql postgresql-8.3