Dip*_*Sen 40 arrays postgresql loops plpgsql postgresql-8.4
我试图integer[]在plpgsql函数中循环遍历整数数组().像这样的东西:
declare
a integer[] = array[1,2,3];
i bigint;
begin
for i in a
loop
raise notice "% ",i;
end loop;
return true;
end
Run Code Online (Sandbox Code Playgroud)
在我的实际用例中,整数数组a作为参数传递给函数.我收到此错误:
Run Code Online (Sandbox Code Playgroud)ERROR: syntax error at or near "$1" LINE 1: $1
如何正确循环数组?
Erw*_*ter 83
DECLARE
a integer[] := array[1,2,3];
i integer; -- int, not bigint!
BEGIN
FOR i IN 1 .. array_upper(a, 1)
LOOP
RAISE NOTICE '%', a[i]; -- single quotes!
END LOOP;
RETURN TRUE;
END
Run Code Online (Sandbox Code Playgroud)
或者尝试PostgreSQL 9.1中的新功能FOREACH:
FOREACH i IN ARRAY a
LOOP
RAISE NOTICE '%', i;
END LOOP;
Run Code Online (Sandbox Code Playgroud)
但是,基于集合的解决方案使用generate_series()或unnest()通常比大集合的循环更快.
基本示例:
搜索标签generate-series或unnest以获取更多信息.