Как изменить поле в массиве записей

Я пришел из мира Oracle и пытаюсь перенести процедуру пакета. Локальные типы были объявлены в пакете Oracle:

  TYPE t_class_record IS RECORD
  (
     id_class       classes.id_class%TYPE,
     field1         number,
     field2         number
  );

  TYPE t_classes_table IS TABLE OF t_class_record
     INDEX BY BINARY_INTEGER;

  l_classes_table                     t_classes_table;

l_classes_table инициализируется оператором SELECT, где более поздние отдельные поля отдельных элементов массива изменяются следующим образом:

  l_classes_table(i).field1 := l_value;

До сих пор я сделал следующее в PostgreSQL:

  • Определен составной тип, соответствующий структуре, указанной выше:

    CREATE TYPE t_class_record AS (id_class CHARACTER VARYING,
                                   field1   INTEGER,
                                   field2   INTEGER);
    
  • Определил процедуру с локальной переменной типа Array of t_class_record:

    l_classes_array                   t_class_record [];
    

Но когда я пытаюсь изменить поле записи в массиве, я получаю синтаксическую ошибку.

l_classes_array[i].field1 := l_value;

Ошибка ERROR: syntax error at or near "." Position: 12414, где position указывает на .после [i]. Я понятия не имею, что вызывает эту синтаксическую ошибку.

Моя цель - сохранить массив записей в переменной, чтобы я мог изменять отдельные поля отдельных элементов массива.


person D. Mika    schedule 21.06.2019    source источник


Ответы (1)


В следующем вопросе/ответе есть причина и решение вашей проблемы:

PL/pgSQL: доступ к полям элемента массива пользовательского типа

person Feike Steenbergen    schedule 03.07.2019
comment
Вот мнение Тома Лейна по этому поводу: id/30905.1562075577%40sss.pgh.pa.us - person a_horse_with_no_name; 03.07.2019