use*_*199 1 arrays postgresql plpgsql
如何在PostgreSQL中动态创建数组?
考虑这个,例如:
CREATE OR REPLACE FUNCTION fun( )
RETURNS SETOF void AS
$BODY$
DECLARE
i numeric;
BEGIN
FOR i in 1..10 LOOP
//I have to create an array as
arr1[] ,arr2[] ... based on length
END LOOP;
END;
$BODY$
LANGUAGE plpgsql
Run Code Online (Sandbox Code Playgroud)
为此目的有一个特殊功能 - array_fill:
postgres=# select array_fill(0, ARRAY[10]);
array_fill
-----------------------
{0,0,0,0,0,0,0,0,0,0}
(1 row)
postgres=# select array_fill('Hello'::text, ARRAY[10]);
array_fill
---------------------------------------------------------------
{Hello,Hello,Hello,Hello,Hello,Hello,Hello,Hello,Hello,Hello}
(1 row)
postgres=# select array_fill(0, ARRAY[3,3]);
array_fill
---------------------------
{{0,0,0},{0,0,0},{0,0,0}}
(1 row)
在PL/pgSQL中(但对于大型数组(超过100个项目)来说速度要慢得多:
DO $$
DECLARE
result int[] = '{}';
BEGIN
FOR i IN 1..10
LOOP
result := result || 0;
END LOOP;
RAISE NOTICE '%', result;
END;
$$;