2017-01-21 4 views
0

이 postgressql 함수에서 문자열을 분할하여 배열을 만들었습니다. 이제이 배열에 루프가 필요하고 일부 처리가 수행됩니다.postgresql에서 문자열 []을 반복하는 방법은 무엇입니까?

기능 :

CREATE OR REPLACE FUNCTION getAllFoo() RETURNS character varying as 
$BODY$ 
DECLARE 
    arr_split_data text[]; 
    counter character varying; 
begin 

    counter := ''; -- Init value 

    -- split data. Add in array 
    select into arr_split_data regexp_split_to_array('a,b,c,d,e,f',','); 

    FOR r IN arr_split_data -- error 
    LOOP 
     counter := arr_split_data[r] || '_' || counter; -- do some processing 
    END LOOP; 

    return counter; 
END 
$BODY$ 
LANGUAGE 'plpgsql'; 

하지만이 기능을 실행할 때이 오류를 error

을 얻고있다. 내 구문 for loop가 잘못 되었습니까?

답변

2

구문은

FOREACH r IN ARRAY arr_split_data 
LOOP 
    counter := r || '_' || counter; 
    -- do some processing 
END LOOP; 

당신은 너무 r를 선언해야합니다 수 있습니다 :

DECLARE 
    arr_split_data TEXT []; 
    r    CHARACTER VARYING; 
    counter  CHARACTER VARYING; 
BEGIN 

항을 참조 설명서의 41.6.5 : 작동하지 Looping Through Arrays

+0

. 오류 - FOREACH의 ** 루프 변수는 알려진 변수 또는 변수 목록이어야합니다 ** –

+0

@Deepakgupta : 변수'r'을 선언하십시오 –

0
CREATE OR REPLACE FUNCTION getAllFoo() RETURNS character varying as 
    $BODY$ 
    DECLARE 
     r    character varying;  
     arr_split_data text[]; 
     counter   character varying; 
    begin 
     counter := ''; -- Init value 

     -- split data. Add in array 
     select into arr_split_data regexp_split_to_array('a,b,c,d,e,f',','); 

     FOREACH r IN array arr_split_data LOOP 
      counter := counter || '_' || r; -- do some processing 
     END LOOP; 
     return counter; 

    END 
    $BODY$ 
    LANGUAGE 'plpgsql';