Как изменить поле в массиве записей - PullRequest
0 голосов
/ 21 июня 2019

Я из мира 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 типа t_class_record:

    l_classes_array                   t_class_record [];
    

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

l_classes_array[i].field1 := l_value;

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

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

1 Ответ

1 голос
/ 03 июля 2019

Приведенные ниже вопросы и ответы имеют причину и решение вашей проблемы:

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

...