2013-08-28 2 views
1

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 
+1

그래서 당신은 동적 배열을 통해 루프를 배열을 만들려면 않습니다
당신은 또한 같은 배열의 집합을 반환 한 후 반복 기능을 만들 수 있습니까? 귀하의 모범에서 나는 분명하지 않습니다. 배열에 원소를 추가하기 위해서'array_append'를 사용할 수 있습니다. http://www.postgresql.org/docs/current/static/functions-array.html –

답변

3

특별한 이러한 목적을 위해 기능이있다 - array_fill :

이 등을 고려 PL/pgSQL의에서

 
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) 

(하지만 100 개 항목 이상 (대형 배열 상당히 느립니다) :

 
DO $$ 
DECLARE 
result int[] = '{}'; 
BEGIN 
    FOR i IN 1..10 
    LOOP 
    result := result || 0; 
    END LOOP; 
    RAISE NOTICE '%', result; 
END; 
$$; 
+0

배열에 값을 저장하고 싶지 않습니다. 나는 arr1 [], arr2 [], arr3 [], arr4 [] 같은 배열을 n 번 만들고 싶다. – user2659199

+0

죄송합니다, 이해가 안됩니다. 왜 그랬니? 너 뭐하니? –

+0

for 루프를 사용하여 배열을 만들어야합니다. for 루프가 4 번 실행되면 arr1, arr2, arr3, arr4와 같은 4 개의 배열을 생성합니다. – user2659199

0

최종 목표를 알지 못하면 어떤 방향으로 나아가 야하는지 정말 어렵습니다. Pave l Stehule은 배열 작성에 대한 조언을 해 주었고, 임시 테이블을 사용하여 함수 내에 배열을 저장할 수 있습니다.

create or replace function fun1() 
returns setof int[] as 
$BODY$ 
declare 
    i int; 
begin 
    for i in 1..10 loop 
     return next array_fill(0, array[i]); 
    end loop; 
end; 
$BODY$ 
language plpgsql; 


create or replace function fun2() 
returns setof int as 
$BODY$ 
declare 
    a int[]; 
begin 
    for a in select * from fun1() loop 
     return next array_length(a, 1); 
    end loop; 
end; 
$BODY$ 
language plpgsql; 

sql fiddle frmo

관련 문제