Как присвоить значение многомерному массиву в процедуре postgresql - PullRequest
0 голосов
/ 16 апреля 2020

Я хотел бы динамически назначать значения в массив, используя PostgreSQL.

, что я сделал до сих пор: - Я объявил _tmp_user_data как _tmp_user_data character varying[][];, и я записал присвоение массива внутри posgre sql cursor

    _counter := 0;
    open _user_data_cursor for execute _sql_user_data;
    Loop
        FETCH _user_data_cursor INTO _tmp_user_name, _tmp_crop_name;
        If found Then
            RAISE NOTICE '_tmp_crop_name name:%', _tmp_crop_name;
            _tmp_user_data[_counter]['user_name'] := _tmp_user_name;
        else
            exit;
        end if;
        _counter := _counter + 1;
    END LOOP;
    CLOSE _user_data_cursor;

Я получил следующую ошибку

ОШИБКА: неверный синтаксис ввода для целого числа: "имя_пользователя"

1 Ответ

1 голос
/ 16 апреля 2020

Основная проблема в том, что Postgres массивы принимают только целочисленные индексы , а не строки.

<strike>_tmp_user_data[_counter]['user_name']</strike>

Примерно так может работать:

_tmp_user_data[_counter][1]  -- _counter being an integer variable

Начните читать руководство здесь.

Нет данных type varying[][] (хотя это написание допустимо). Тип данных character varying[] (или varchar[]). Массивы Postgres используют один и тот же тип для любого числа измерений. См .:

И Postgres Массивы по умолчанию основаны на 1. Руководство:

По умолчанию PostgreSQL использует одностороннее соглашение о нумерации для массивов, то есть массив n элементы начинаются с array[1] и заканчиваются array[n].

Похожие:

Как правило, вам не нужен явный курсор для l oop в PL / пг SQL. См .:

И чаще всего существует превосходное решение без каких-либо циклов ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...