concat to array во время цикла в postgres - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть массив строк, и мне нужно l oop через массив; при зацикливании каждой строки мне нужно l oop увеличить идентификатор этой строки в таблице и создать массив INT этих идентификаторов.

Фактически мне нужно go FROM:

{"a", "b", "c"}

TO:

{3,6,8}

Я получаю l oop без ошибок, и я получаю правильный идентификатор для каждой строки в исходном массиве, но у меня есть пустой массив объявляется, что, кажется, не заполняется ... Это код

    FOREACH v_single_exisisting_user_code IN ARRAY a_existing_user_group_codes
    LOOP
        RAISE NOTICE 'one group code: %', (SELECT privilege_group_id
                                           FROM privilege_group
                                           WHERE privilege_group_code = v_single_exisisting_user_code);

        PERFORM CONCAT(a_groups_to_int_array, (SELECT privilege_group_id FROM privilege_group WHERE privilege_group_code = v_single_exisisting_user_code));


        RAISE NOTICE 'a_groups_to_int_array : %', a_groups_to_int_array;
    END LOOP;

Первый уведомитель о повышении дает мне правильный привилегированный_с_группой, но второе уведомление о повышении по-прежнему возвращает пустой массив ... так что concat не происходит. Я пробовал ARRAY_APPEND () с одинаковыми результатами, всегда пустой массив.

Есть мысли о том, что я делаю не так?

1 Ответ

0 голосов
/ 11 апреля 2020

Я нашел ответ здесь: Функция array_append не работает

Вы должны использовать SELECT вместо PERFORM и затем INTO в том же массиве

SELECT  ARRAY_APPEND(a_groups_to_int_array, v_single_exisisting_user_code) INTO a_groups_to_int_array;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...