此请求:
unnest('{1,2}'::int[]);
给了我这个错误:
语法错误处于“不需要的”或其附近
unnest('{1,2}');
无效
为什么?
intire:
CREATE OR REPLACE FUNCTION result() RETURNS setof users AS
$$
DECLARE
BEGIN
unnest('{1,2}'::int[]);
RETURN QUERY SELECT * FROM users;
END;
$$ LANGUAGE plpgsql;
SELECT result();
修改 核心理念:
使用存储在列中的bigint []进行检索和操作。 所以,我有这个:
SELECT * FROM users WHERE email = email_ LIMIT 1 INTO usr;
然后,usr.chain包含一些bigint[]
数据。例如,{1,2,3,4,5,6,7,8,9,10}
。我想只保存最后的4个。
如何检索{7,8,9,10}
和{1,2,3,4,5,6}
并迭代这些数组?
我只发现解决方案是使用SELECT FROM unnest(usr.chain) AS x ORDER BY x ASC LIMIT (sdl - mdl) OFFSET mchain
等等。但是unnest
函数给了我这个愚蠢的错误。我真的不明白为什么会这样。它在我在问题开头写的简单案例中不起作用。 subarray
函数无效,因为数据类型为bigint[]
而非int[]
此外,代码unnest(ARRAY[1,2])
给了我同样的错误。
http://www.postgresql.org/docs/9.2/static/functions-array.html
array_append
函数
答案 0 :(得分:1)
迭代数组:
CREATE OR REPLACE FUNCTION someresult(somearr bigint[] ) RETURNS setof bigint AS
$$
DECLARE
i integer;
x bigint;
BEGIN
for x in select unnest($1)
loop
-- do something
return next x;
end loop;
-- or
FOR i IN array_lower($1, 1) .. array_upper($1, 1)
LOOP
-- do something like:
return next ($1)[i];
end loop;
END;
$$ LANGUAGE plpgsql;
select someresult('{1,2,3,4}') ;
array_append ....
CREATE OR REPLACE FUNCTION someresult2(somearr bigint[],val bigint ) RETURNS bigint[] AS
$$
DECLARE
somenew_arr bigint[];
BEGIN
somenew_arr = array_append($1, $2 );
return somenew_arr;
END;
$$ LANGUAGE plpgsql;
select someresult2('{1,2,3,4}' ,222) ;
所以,这里有基本的例子如何迭代和追加数组。现在,您可以一步一步地写下您想要做的事情,实现目标。