#postgresql
Вопрос:
Я хочу создать вызываемую функцию test_func_from_array(_test_id целое число, _test_array текст[]). Мне нужно вставить данные с одинаковым идентификатором test_id, но разными элементами массива _test_array. _test_array состоит из строк, которые мне нужно разделить и вставить. Я пытался сделать вот так:
CREATE OR REPLACE FUNCTION public.test_func_from_array(_test_id integer, _test_array text[])
RETURNS void
LANGUAGE plpgsql
AS $function$
begin
foreach i in array _test_array
loop
INSERT INTO public.test_func_array_trgt ("_test_id",test_from_array_1, test_from_array_2, test_from_array_3)
VALUES( insplit_part(i, '/', 1), insplit_part(i, '/', 2), insplit_part(i, '/', 3));
end loop;
END;
$function$
;
Но это дает мне ошибку loop variable of FOREACH must be a known variable or list of variables
. Что я делаю не так?
Является ли данный подход правильным или его следует использовать по-другому?
Upd.
Изменено на
CREATE OR REPLACE FUNCTION public.test_func_from_array(_test_id integer, _test_array text[])
RETURNS void
LANGUAGE plpgsql
AS $function$
declare
i varchar;
begin
foreach i in array _test_array
loop
INSERT INTO public.test_func_array_trgt (test_id,test_from_array_1, test_from_array_2, test_from_array_3)
VALUES( "_test_id",split_part(i, '/', 1), split_part(i, '/', 2), split_part(i, '/', 3));
end loop;
END;
$function$
;
Все работает нормально
Ответ №1:
Изменено на
CREATE OR REPLACE FUNCTION public.test_func_from_array(_test_id integer, _test_array text[])
RETURNS void
LANGUAGE plpgsql
AS $function$
declare
i varchar;
begin
foreach i in array _test_array
loop
INSERT INTO public.test_func_array_trgt (test_id,test_from_array_1, test_from_array_2, test_from_array_3)
VALUES( "_test_id",split_part(i, '/', 1), split_part(i, '/', 2), split_part(i, '/', 3));
end loop;
END;
$function$
;
И все работает нормально. Мне нужно было заявить 'i'
об 'for'
этом раньше.