2017-01-21 10 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

, когда я выполнить эту функцию. Является ли мой синтаксис для цикла неправильным?

ответ

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'; 
Смежные вопросы